Sari la conținut
ELFORUM - Forumul electronistilor

Dilema in ccs....


soulraven

Postări Recomandate

am incercat sa continui un proiect mai vechi, "computer "de bordpentru dacia 1310", numai ca vreau sa mai adaug si o identificare cu Ibutton folosind 1wire.Pana aici toate si frumose, am reusit mare parte din proiect, numai ca m-am impotmolit la cateva aspecte legate de cod, mentionez ca nu ma pricep foarte bine la programare si C, dar iara cum am gandit proiectul pana acum si ce vreau sa realizez.- Soferul se urca in masina, la cheie are atasat un tag ibutton, motorul este oprit. Soferul conecteaza tag-ul ibutton pentru cateva secunde in mufa speciala pana este identificat, in acest moment din montajul meu iese un 1logic.- Soferul porneste masina si pleaca.- Daca masina este pornita inainte sa fie identificat Ibutton-ul, atunci iesire ramane 0logic.- Daca ibutton-ul este identificat, dar pentru 5 minute nu s-a pornit motorul, iesire trece in 0logic.Ceea ce nu reusesc eu pana in momentul de fata si nici nu stiu, este cum comand timerul sa numere 600 de secunde si sa verifice in acelasi timpul daca tag-ul este verificat sau nu, restul functiilor soft le-am facut, dar m-am blocat la implementarea situatiei de mai sus.ma puteti ajuta?am atasat proiectul inclusiv schema in proteous si codul sursa.macar sa imi dati sfaturi sau sa ma ajutati sa imi vad si eu visul cu ochii, pentru ca apoi vine distractia cu programarea si executarea cablajului.

Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • petre_s

    2

  • soulraven

    2

  • wwwglro

    1

Vizitator pmar_kpj

salut !pai ca sa poti numara mai mult de 256 trebuie sa definesti variabilele de tip intreg pe 16 biti! acum le ai pe 8 biti (byte 0-255).Deci : in loc de : byte seconds, high_count;scrii : unsigned int16 seconds, high_count;acu' o sa poti numara de la 0-65535!bafta

Link spre comentariu
  • 3 săptămâni mai târziu...

salut !pai ca sa poti numara mai mult de 256 trebuie sa definesti variabilele de tip intreg pe 16 biti! acum le ai pe 8 biti (byte 0-255).Deci : in loc de : byte seconds, high_count;scrii : unsigned int16 seconds, high_count;acu' o sa poti numara de la 0-65535!bafta

Nu neaparat...Folosesti intreruperi interne (rollover timer0)Programezi ca intreruperile generate sa aiba loc la un anumit interval ex 20ms (cat numara de la 0 la 255). Cand face rollover si numara iar de la 0 la 255 incrementezi un counter.Daca intreruperile au loc la fiecare 20ms rezulta ca dupa 50 de intreruperi trece o secunda adica cand counterul tau ajunge la 50 inseamna ca a trecut o secunda...Folosesti (corpul functiei intrerupere)#int_rtccvoid clock_isr() { ...aici codul de mai sus......poti testa dupa fiecare intrerupere si starea intrarii care te intereseaza...}void main(){setup_counters (RTCC_INTERNAL, RTCC_DIV_1); /modifici rtcc_div_1 in fnct de durata intreruperiienable_interrupts (INT_RTCC);enable_interrupts(GLOBAL);do{codul tau ......} while(1) //bucla infinitaFoloseste helpul din ccs ca sa vezi exact sintaxa corecta...Bafta
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări