Jump to content
ELFORUM - Forumul electronistilor

[PROBLEMA]Citire port(atmega128)


Guest fantomass

Recommended Posts

Guest fantomass

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

  • Replies 4
  • Created
  • Last Reply

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

Guest fantomass
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

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

Guest fantomass

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 :aplauze :aplauze
Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.




×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines