Sari la conținut
ELFORUM - Forumul electronistilor

ajutor cu sintaxa AVRdude CPP


Vizitator lpciprian

Postări Recomandate

Vizitator lpciprian

Incerc sa inteleg cum functioneaza codul pentru citirea unui switch:#include #include #include /* function prototypes */void delay_ms(uint16_t ms);void init_io();int button_is_pressed();void toggle_led();int main (void){ init_io(); while (1) { if (button_is_pressed()) { toggle_led(); delay_ms(LOCK_INPUT_TIME); } }}void init_io() { /* set LED pin as digital output */ LED_DDR = _BV (LED_BIT); /* led is OFF initially (set pin high) */ LED_PORT |= _BV(LED_BIT); /* turn on internal pull-up resistor for the switch */ BUTTON_PORT |= _BV(BUTTON_BIT);}int button_is_pressed(){ /* the button is pressed when BUTTON_BIT is clear */ if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) { delay_ms(DEBOUNCE_TIME); if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) return 1; } return 0;}voidtoggle_led(){ LED_PORT ^= _BV(LED_BIT);}Ce inseamna "_BV"?Ce face "bit_is_clear"?Cu ce trebuie sa inlocuiesc "BUTTON_PIN, BUTTON_BIT"?Unde as putea gasi documentatie pentru niste librarii ale libC ca sa inteleg si eu ce fac functiile din ele?Multumesc.

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

Top autori în acest subiect

  • nana

    2

  • godFather89

    1

Top autori în acest subiect

Sa o luam pe rand :

1 "Ce inseamna "_BV"?" acesta este un macrou definit in C, adica este ca o functie pe care o construiesti tu, documentatia despre aceste macrouri se gaseste in lib avr/sfr_defs.h si se numeste special function register.

Ceea ce face _BV(3) este egal cu (1<<3) sau deplasarea(shiftare) la stanga a bitului 1 cu 3 pozitii, daca ai reg PORTA=010000001 si scri PORTA=_BV(3) => PORTA=01000101.

 

2"Ce face "bit_is_clear"?" la fel ca si la intrebarea 1 este tot un macrou care se gaseste in aceasi biblioteca avr/sfr_defs.h

Aceasta functie verifica daca bitul din reg apelat pe pozitia dorita este 0 sau 1. bit_is_clear(registru,pozitie) si returneaza 0 daca bitul este 1 respectiv 1 daca este 0.

 

3"Cu ce trebuie sa inlocuiesc "BUTTON_PIN, BUTTON_BIT"?" deci aici sunt niste defineuri pe care trebuiia sa le declari ori intr-un fisier heder sau direct in main in care iti definesti ce port folosesti si ce bit pentru buton, faci legatura dintre partea fizica si ceea software.

De exmplu daca pui butonul pe portul A3 o sa scri asa:

#define BUTTON_PIN PINA

#define BUTTON_BIT 3

!! PORT este registru de output cand vrei sa setezi valorile 0 sau 1 ca output respectiv PIN este registru de status, atunci cand vrei sa citesti o valoare(buton)

 

4"Unde as putea gasi documentatie pentru niste librarii ale libC ca sa inteleg si eu ce fac functiile din ele?"

Documentatia se gaseste in manualul winavr sau avr-gcc, mai exact in folderul unde ai instalat cauta in fisierul "/doc/avr-libc/avr-libc-user-manual/index.html" sau http://www.nongnu.org/avr-libc/

 

Sper ca ti-am fost de folos !!

Link spre comentariu

1 "Ce inseamna "_BV"?" acesta este un macrou definit in C

 

Macrou e traducerea pentru macro? Doar intreb... mi se pare cam ciudat.

 

daca ai reg PORTA=010000001 si scri PORTA=_BV(3) => PORTA=01000101.

 

De fapt, PORTA o sa fie 00000100. Ca sa obtii efectul descris de tine, trebuie PORTA |= _BV(3)
Link spre comentariu

1 "Ce inseamna "_BV"?" acesta este un macrou definit in C

Macrou e traducerea pentru macro? Doar intreb... mi se pare cam ciudat.

 

daca ai reg PORTA=010000001 si scri PORTA=_BV(3) => PORTA=01000101.

De fapt, PORTA o sa fie 00000100. Ca sa obtii efectul descris de tine, trebuie PORTA |= _BV(3)

 

Da intradevar am gresit la chestia aia cu _BV, am uitat de sau pe biti.

Macrou ala e traducere ... articulata pentru macro. Dar sa nu ne gandim la pesti :bataie ca nu prea au ce cauta ei prin programare.

Link spre comentariu
Vizitator lpciprian

Sa o luam pe rand :1 "Ce inseamna "_BV"?" acesta este un macrou definit in C, adica este ca o functie pe care o construiesti tu, documentatia despre aceste macrouri se gaseste in lib avr/sfr_defs.h si se numeste special function register. Ceea ce face _BV(3) este egal cu (1<<3) sau deplasarea(shiftare) la stanga a bitului 1 cu 3 pozitii, daca ai reg PORTA=010000001 si scri PORTA=_BV(3) => PORTA=01000101.2"Ce face "bit_is_clear"?" la fel ca si la intrebarea 1 este tot un macrou care se gaseste in aceasi biblioteca avr/sfr_defs.h Aceasta functie verifica daca bitul din reg apelat pe pozitia dorita este 0 sau 1. bit_is_clear(registru,pozitie) si returneaza 0 daca bitul este 1 respectiv 1 daca este 0.3"Cu ce trebuie sa inlocuiesc "BUTTON_PIN, BUTTON_BIT"?" deci aici sunt niste defineuri pe care trebuiia sa le declari ori intr-un fisier heder sau direct in main in care iti definesti ce port folosesti si ce bit pentru buton, faci legatura dintre partea fizica si ceea software.De exmplu daca pui butonul pe portul A3 o sa scri asa:#define BUTTON_PIN PINA #define BUTTON_BIT 3!! PORT este registru de output cand vrei sa setezi valorile 0 sau 1 ca output respectiv PIN este registru de status, atunci cand vrei sa citesti o valoare(buton)4"Unde as putea gasi documentatie pentru niste librarii ale libC ca sa inteleg si eu ce fac functiile din ele?"Documentatia se gaseste in manualul winavr sau avr-gcc, mai exact in folderul unde ai instalat cauta in fisierul "/doc/avr-libc/avr-libc-user-manual/index.html" sau http://www.nongnu.org/avr-libc/Sper ca ti-am fost de folos !!

Fara sa stiu de unde sa incep a invata mi se pare totul destul de greu :) Deocamdata aprind led-uri, misc motoare pas cu pas...chestii simple. In curand o sa-i apas si pe butoanele avr-ului asta! Pun eu mana si pe un LCD... sper :DMultumesc mult!PS: Algebra asta booleana si operarea bitilor ma omoara :))
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