Habe folgendes Skript geschrieben welches die Tastatur von Pollin auslesen soll: PORTA = 0x00; //Pullups ausschalten an Pins A DDRA = (1<<PA1); //PA1 als Ausgang ==> Masse an (1) scan1 = ( PIND | (1<<7)); DDRA = (1<<PA0); //PA0 als Ausgang ==> Masse an (2) scan2 = ( PIND | (1<<7)); DDRA = 0x00; //Alle Pins an A als Eingänge Komischerweise funktioniert es beim Scan1 und beim 2. Mal nicht. Jemand von euch ne Idee, woran das liegen könnte? Der PinA0 ist auch der XTAL1, allerding habe ich die Standard Fuses nicht verändert, so dass der interne Oszillator läuft.
Welche Tastatur? Ist es beabsichtigt, da0 bei 1<<PA0 PA1 im DDRA wieder auf 0 geht (=Eingang?). DDRA = (1<<PA0) löscht nämlich PA1 wieder. Grüße, Freakazoid
So. Hab mal ein wenig gepollined *g*: PORTD = 6..12 ? PORTA = 1..4 ? Sind Pullups bei PortD eingeschaltet? Sonst hängt der Port bis auf den von der Tastatur auf Masse gezogenen Pin ein wenig in der Luft. Grüße, Freakazoid
Gast
#344323
Ja, danke. Richtig. Nur Pin 3,4 sind n.c. sonst stimmt alles. Pullups sind aktiviert, funktioniert beim erstern mal auch wunderbar.
So, ich hab jetzt noch ein bisschen mit dem AVR rumgespielt. Ich glaube mittlerweile wirklich, dass der µC-Pin kaputt ist. Er ist obwohl das im Programm eindeutig anderst ist irgendwie immer Eingang und hängt in der Luft.
Aslo hier für alle: Ich habe das Problem behoben indem ich zwischen DDRA
=... und scanx = ... noch ein
asm volatile ("nop");
eingeschoben habe. Offensichtlich ist der Chip zu schnell für den
Strom?!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.