Guest fantomass Posted August 28, 2009 Share Posted August 28, 2009 Buna, am incercat sa citesc sa vad daca pe un port este "1" sau "0" logic, iar cand era vroiam sa aprind un led, pt confirmare Am scris urmatorul cod, pt citire de pe pinul PC0. #include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>int main(){ DDRA = 0xff; PORTC = 0xff; while (1) { if(PINC & 0x01) PORTA = 0xff; else PORTA = 0x00; } return 0;} Problema e ca dupa ce controlerul incepe sa ruleze ledul sta tot timpul aprins, iar daca pun pinul PC0 la masa becul se stinge, iar daca il pun la tesniune nu se schimba nimic. Nu stiam de ce se comporta asa, si mi-a venit o idee, asa ca am masurat tensiunea la portul C. Se pare ca aveam aprox 5V pe port(pe tot portul). Dupa ce am vazut asta am conectat PC0 la un led, culmea e ca nu s-a aprins, desi multimetrul arata 4.98V. Am mai incercat si pe portul A sa citesc, si tot asa s-a comportat. Am crezut ca am ars portul, dar nu e asa. Stie cineva de ce se comporta asa? Link to comment Share on other sites More sharing options...
Laci Posted August 28, 2009 Share Posted August 28, 2009 Da,citesti portc nu porta, activezi pull-up intern prin portc=0xff scrie si un pdf. in cod ai porta=0xff pentru portc.1 1 logic .Cum sa-l faci: fara portc=0xff, si leaga o rezistenta pull-down(10-100k) la pinc0, sau care citesti. Link to comment Share on other sites More sharing options...
Guest fantomass Posted August 28, 2009 Share Posted August 28, 2009 Da,citesti portc nu porta Da, mai sus am scris din greseala(am editat).ctivezi pull-up intern prin portc=0xff Si nu asta am facut cand am scris: PORTC = 0xff;(am vazut in pdf, de aia am si scris )in cod ai porta=0xff pentru portc.1 1 logic Exact!Cum sa-l faci: fara portc=0xff Dar adineauri ai spus ca sa fac PORTC = 0xff;;, sau nu am inteles eu bine. Oricum am scos din codul de mai sus PORTC = 0xff; dar tot asa face. Dar de ce am tensiune pe PORTC? Link to comment Share on other sites More sharing options...
Laci Posted August 28, 2009 Share Posted August 28, 2009 Tocmai asta-i sa nu activezi pull-up intern, fara portc=0xff.Leaga o rezistenta de pull-down intre pinul citit si gnd (10-100k), in mod normal fara rezistenta de pull-up intern activat ai zgomot la intrare, deobicei 50Hz.Poti folosi si cu pull-up intern, chiar este indicat, ca minimizezi schema/circuitul, si activezi ledul cand pinul este pe 0, adica activ pe low. Link to comment Share on other sites More sharing options...
Guest fantomass Posted August 28, 2009 Share Posted August 28, 2009 Tocmai asta-i sa nu activezi pull-up intern, fara portc=0xff. Am observat ca acum nu mai am "1" logic ci am "0" logic(2,2V).Am legat o rezistenta de 10K pe pinul PC0, am facutr ca in exemplul http://www.madsciencenotebook.com/node/4, si pana la urma a mers.Am mai incercat ceva de genu asta si a mers:#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>int main(){ uint8_t nr; DDRA = 0xff; //PORTC = 0x01; while (1) { nr = PINC; if((nr & 0x01) || (nr & 0x02) || (nr & 0x04) || (nr & 0x08)) PORTA = 0xff; else PORTA = 0x00; } return 0;}Iar ca sa depistez daca este tensiune pe pin am scris asa:#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>int main(){ uint8_t nr; DDRA = 0xff; //PORTC = 0x01; while (1) { nr = PINC; if(!(nr & 0x01)) PORTA = 0xff; else PORTA = 0x00; } return 0;}Multumesc frumos Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.