Hallo, ich habe eine hoffentlich einfache Frage. Den folgenden Code-Ausschnitte programmiere ich in meinen ATmega32. Warum ist aber der PINA0 auf HIGH. Ich habe doch DDRA auf Eingang gestellt. int main (void) { DDRA=0x00; PORTA=(1<<PA0); return 0; } Danke
Sorry aber das wird dir hoffenltich nimand hier sagen!!! Was verstehst du nicht im Datenblatt?
Weil du mit PORTA in diesem Fall die internen pull-ups aktivierst. Du mußt den Pin dann extern auf Masse ziehen, um eine Veränderung zu erkennen.
@Greenhorn >ich habe eine hoffentlich einfache Frage. Den folgenden Code-Ausschnitte >programmiere ich in meinen ATmega32. Warum ist aber der PINA0 auf HIGH. >Ich habe doch DDRA auf Eingang gestellt. Mal abgesehen davon, dass es wenig Sinn macht einem Port, welcher als Eingang definiert ist einen Wert zuzuweisen. Allerdings bewirkt das beim AVR, dass der interne Pull-up von PA1 eingeschaltet wird. Siehe Datenblatt. MFG Falk
[c] int main (void) { DDRA=0x00; //Datenrichtung Eingang PORTA=(1<<PA0);//Pull Up aktiviert return 0; } [/] Der Controller macht genau, was du ihm sagst. MW
Hallo, ja jetzt habe ich es im Datenblatt gesehen. Wenn ich einen PIN auf High schalte sind folgende Codezeilen elektrisch äquivalent. DDRA=0xFF; PORTA=(1<<PA0); DDRA=0x00; PORTA=(1<<PA0); Das Ergebnis in beiden Fällen ist HIGH.
@Greenhorn >ja jetzt habe ich es im Datenblatt gesehen. Wenn ich einen PIN auf High >schalte sind folgende Codezeilen elektrisch äquivalent. Nicht ganz. >DDRA=0xFF; >PORTA=(1<<PA0); Das ist ein Ausgang, der HIGH treibt. Dort kann man schon ordentlich Strom rausziehen (20mA) ohne dass die Spannung wesentlich in die Knie geht. >DDRA=0x00; >PORTA=(1<<PA0); Das ist nur ein interner Pull-up, 30-50 kOhm. Damit kann man bestenfalls Taster auswerten, nennenswert Strom bekommt man aus dem Pion nicht raus. >Das Ergebnis in beiden Fällen ist HIGH. Wenn keinerlei Last am Pin hängt. MFG Falk
Das heist aber nicht das sie elektrisch äquivalent sind. Das eine mal (Eingang) ist der Pin High, weil über den Pullup Widerstand der Pin mit Vcc verbunden ist. Du kannst so einen Pin ohne Bedenken mit Masse verbinden. Der Pin wird auf Low gezogen und beim Abfragen erkennt der µC das als Low an Das andere mal (Ausgang) ist der Pin High, weil der Port Ausgangstreiber da aktiv Strom drauf legst. Wenn du so einen Pin mit Masse verbindest, baust du einen Kurzschluss und überlastest den Ausgangstreiber, der dann irgendwann in Rauch aufgehen wird.
>sind folgende Codezeilen elektrisch äquivalent Codezeilen sind sowieso nicht elektrisch, und äquivalent sind die auch nicht. Programmierst du DDRA=0x00; PORTA=(1<<PA0); und legst den Pin0 von PortA danach auf Masse (z.B. per Taster), dann geht das entsprechende PINA-Bit auf 0, und du kannst den Tastendruck auswerten. Programmierst du DDRA=0xFF; PORTA=(1<<PA0); und legst den Pin0 von PortA danach auf Masse (z.B. per Taster), dann geht der Ausgang kaputt, und du kannst den AVR wegwerfen. Als äquivalent würde ich das nicht bezeichen. Oliver
Elektrisch equivalent?! Nö. DDRA=0xFF; PORTA=(1<<PA0); So hast du den Port auf Ausgang geschaltet und hast auf dem Pin ein High ausgegeben. In dieser "Betriebsart" kannst du auch Strom aus dem Port ziehen (da per Mosfet die Versorgungsspannung auf den Pin geschaltet ist) DDRA=0x00; PORTA=(1<<PA0); Hier hast du den Port als Eingang. Bei dem Pin ist der Pullupwiderstand aktiviert. Dieser liegt in der Größenordnung von 50kOhm (wenn ich mich recht errinnere) Wenn du jetzt eine etwas längere Leitung dran hast schau dir mal die Flanken vom Signal an ... Durch den Widerstand und die Leitung wird ein Tiefpassfilter gebildet.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.