Vizitator Cristian Giurgea Postat Noiembrie 12, 2011 Partajează Postat Noiembrie 12, 2011 Salut,sunt interesat de un circuit prin care sa interfatez atmega8535 cu bobina de la ciclocomputerul de la bicicleta. Initial am folosit comparatorul de pe atmega8535, insa am avut o problema cel putin ciudata: folosind un soft care scrie pe seriala cand ACO este pe "rising edge", microcontrollerul scria tot timpul cat aveam fire conectate la AIN0 si AIN1, lasate in aer. Se oprea doar cand pe ambele le conectam la un pin al microcontrollerului.Am incercat sa conectez AIN1 la iesirea unui potentiometru aflat intre VCC si GND, dar acelasi rezultat. Momentan am abandonat schema, urmand sa mai cer sfaturi specializate.Cineva mi-a sugerat ca sistemul de la ciclocomputer nu s-ar baza pe generarea unui spike de tensiune la fiecare trecere a magnetului. Stie cineva care este principiul ciclocomp.? Mai bine zis, stie cineva principiul vreunui ciclocomputer aflat acum pe piata? Sunt interesat sa ma interfatez cu ciclocomputerul in felul urmator: la fiecare trecere a magnetului prin fata bobinei imi trebuie un spike de 5V la un pin al microcontrollerului ( sau o intrerupere executata ) pentru a inregistra acest eveniment. Are cineva vreo schema, a facut cineva asa ceva? Link spre comentariu
bogdan_ Postat Noiembrie 12, 2011 Partajează Postat Noiembrie 12, 2011 Normal ar trebui sa faci asa: o intrare o legi la o referinta, obtinuta cum ai spus cu un potentiometru intre vcc si ground. Pe cealalta intrare aplici semnalul. Acum, eu amvazut mai multe variante: ai un magnet pe roata care trece pe langa o bobina sau un senzor hall sau un contact reed. Functie de care tip este, ai nevoie de un circuit diferit. Poti afla mai multe despre senzor? Link spre comentariu
Vizitator Cristian Giurgea Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 bogdan_, Sistemul este acesta: http://www.decathlon.ro/RO/suport-ciclo ... 170664472/ , dar nu stiu mai multe. O sa incerc sa aflu. In paralel cu asta, as putea sa cumpar un ciclocomputer daca cineva imi spune "acest ciclocomp. se bazeaza pe acest principiu". Ceea ce nu inteleg in mom de fata este comportamentul comparatorului. Intrarea AIN1 era conectata la iesirea potentiometrului. Oricat de mult cresteam tensiunea pe AIN1 din potentiometru, indreptandu-ma spre VCC, daca AIN0 era conectat la un alt fir de cca 30 cm lungime si lasat in aer, fara sa atinga nimic, microc. scria continuu pe seriala. Daca conectam firul la masa sau la vcc, se oprea. Codul: #include "../../../avr/usart.h" #include volatile unsigned char uchWriteSerial = 0; ISR( ANA_COMP_vect ) { //set the global flag to write on serial uchWriteSerial = 1; } int main(void) { unsigned char uchOff = 0; USART_Init(); ACSR = (1 << ACIE) | (1 << ACIS1) | (1 << ACIS0); sei(); USART_Transmit( 'S' ); for(;;) { if( uchWriteSerial ) { USART_Transmit( 'A' + uchOff ); uchOff ++; uchOff &= 0x3; ///////// uchWriteSerial = 0; } } return 0; } Cum este posibil asa ceva? Link spre comentariu
Vizitator Cristian Giurgea Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 Salut, pare-se ca e un contact reed, am pus ohmetrul si, cand magnetul trece in dreptul lui, rezistenta devine 0.Again, cu microcontrollerul... am conectat la pinul PB0 un fir cu papuc de plastic, de 20 cm, si, ruland codul de mai jos, am scrieri continue pe seriala:#include int main(void){ unsigned char uchOff = 0; unsigned char uchPD = 0; USART_Init(); USART_Transmit( 'S' ); for(;;) { unsigned char uchD2 = PINB; uchD2 &= ( 1 << PINB0 ); if( uchD2 != uchPD ) { if( uchD2 < uchPD ) { USART_Transmit( 'A' + uchOff ); uchOff ++; uchOff &= 0x3; } uchPD = uchD2; } } USART_Transmit( 'E' ); return 0;}wtf??? Link spre comentariu
bogdan_ Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 Hardware trebuie sa faci asa: Legi senzorul intre VCC si pin si mai pui o rezistenta de 10K sa zicem intre pin si ground. Apoi masori cu multimetrul si teasiguri ca ai 0V pe pin cand nu e magnetul aproape si 5V(sau cat e vcc) cand magnetul e aproape. Un pin de micro folosit ca intrare are impedanta mare, si e suficient cuplajul capacitiv cu reteaua de CA ca pe pinul ala sa vezi o oscilatie continua intre cele 2 nivele. De asta trebuie sa te asiguri ca il fortezi tu in jos/sus din circuitul extern, in cazul de fata switchul forteaza la VCC iar rezistena la ground. Ca sa vezi sigur ca functioneaza fa o bucla infinita in care scoti pe un alt pin exact ce citesti pe pinul ala, si leaga la iesire un led. Ar trebui sa il vezi pulsand. Revizuieste codul ala si ataseazal folosind butonul de Code de sus ca sa se vada mai clar.(ma refer la ultima varianta)Ce ar vrea as faca codul? Link spre comentariu
Vizitator Cristian Giurgea Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 Salut, urmatorul cod: #include "../../../avr/usart.h"//#include <avr/interrupt.h>int main(void){ unsigned char uchOff = 0; unsigned char uchPD = 0; PORTB = 0xFF; USART_Init(); USART_Transmit( 'S' ); for(;;) { unsigned char uchD2 = PINB; uchD2 &= ( 1 << PINB0 ); if( uchD2 != uchPD ) { if( uchD2 < uchPD ) { USART_Transmit( 'A' + uchOff ); uchOff ++; uchOff &= 0x3; } uchPD = uchD2; } } USART_Transmit( 'E' ); return 0;} folosind pinul PB2 conectat la senzor si senzorul conectat la masa, face ceea ce trebuie: cand magnetul trece prin dreptul senzorului, scrie pe seriala un caracter. Este clar ca este un senzor reed. Mersi de explicatia cu oscilatia de nivele. Nu puteam intelege de unde bascularea nivelului. Codul de mai sus se bazeaza pe nivelul 1 logic la PB2 si conectarea la masa cu senzorul reed. Din fericire, nu are oscilatii "nepoftite". Link spre comentariu
bogdan_ Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 Sa inteleg ca merge acum?Totusi, uchD2 < uchPD implica si uchD2 != uchPD asa ca nu vad de ce faci ambele verificari....Mai este totusi ceva care trebuie adaugat, dar care este salvat de transmisiunea pe seriala: debounce.Mai exact, la comutatie o sa ai un zgomot, o perioada in care switchul e citit alternativ 0 -1. Cat dureaza depinde de multi factori, dar ideal ar fi ca dupa fiecare trecere 1-0(ca inteleg ca ai legat senzorul intre pin si masa) sa astepti un timp x pana cand iei in clacul urmatoarea trecere. Tie aici asteptarea iti vine din cat asteapta rutina aia sa trimiti caracterul pe portul serial. Cauta mai multe informatii despre 'debounce' si te vei lamuri. Link spre comentariu
Vizitator Cristian Giurgea Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 ma intereseaza doar "rising edge", ca sa zic asa, de asta fac acea verificare.Interesant ce spui despre acel 'debounce'. Ceva idei despre cum as putea sa scap de el fara un 'delay" controlat in cod? Link spre comentariu
bogdan_ Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 Poti rezolva problema analogic. Pui un condensator de 10n in paralel cu contactul reed. Asta daca ai pus in jur de 10k rezistenta ar trebui sa fie suficient. Link spre comentariu
Vizitator Cristian Giurgea Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 pai... nu am facut decat sa pun pull-up rezistorii prin acel PORTD = 0xFF. In rest, nu am nimic in plus pe montaj, decat pinii controllerului ( bine max232 pentru seriala, un 7805 pentru alimentare ). In concluzie, in paralel cu senzorul, un condensator de 10 nF si un rezistor de 10k in serie cu senzorul reed? Link spre comentariu
bogdan_ Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 Ca aici: Ma gandesc ca e posibil carezistenta de pull up sa fie cam prea mare. Eu am avut probleme in ceva circuite mai zgomotoase si atrebuit sa pun si rezistenta externa. De asta sugeram 10K extern. Valoarea ei din datasheet e undeva la 20 - 50k. Link spre comentariu
Vizitator Cristian Giurgea Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 sa inteleg ca asa ceva, ca in prima schema... merge si varianta a 2-a, cu potentiometru? Link spre comentariu
bogdan_ Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 Nu prea are nici o relevanta potentiometrul acolo. Potentiometrul era relevant daca aveai nevoie de comparator. In plus, invarianta aia daca dai potul la minim, are rezistenta 0 si cand o sa inchizi comutatorul reed o sa faci scurt intre alimentari. Deci prima varianta e cea ok, dar vezi ca e vorba de un condensator de vreo 10n, nepolarizat. Link spre comentariu
Vizitator Cristian Giurgea Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 asta vroiam sa te intreb, ca vazusem in schema data de tine un condensator polarizat... nu ma pricep la electronica, dar credeam ca un condensator de 10 nanoF nu prea poate fi polarizat... deci, e nepolarizat ... ok, acum se leaga ... Link spre comentariu
bogdan_ Postat Noiembrie 13, 2011 Partajează Postat Noiembrie 13, 2011 Greseala mea, am dat copy la schema direct din searchul de la google si mi-a scapat simbolul + pe condensator (inseamnand ca e polarizat). Depinde de aplicatie, poate in unele e necesara o filtrare mare si atunci se foloseste un electrolitic. Dar aici e de ajuns un banal ceramic. Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum