Mittag, Ich habe ein sehr ungewöhnliches Problem mit einem ATTiny2313. Ich bin an einem Projekt dran das sich mit einer Zentralsteuerung für Modellschiffe befasst. Das Board ist fertig geätzt und bestückt. Nur eine der Funktionen meines uC's scheint nicht zu klappen, ich möchte einen Kran auf dem Modellschiff ansteuern, wobei der Kontroller auf ein periodisches Signal vom Empfänger reagieren soll (nur tut er genau dies nicht) um den Kran einzuschalten. Das Signal ist von 3V auf 5V per Optokoppler verstärkt, eine Periode beträgt 50ms, der "1" Zustand wenn ich den Kran per Fernsteuerung einschalte ist 1ms lang. Der Kontroller soll den pin auf genau 1ms abfragen und dann den Kran einschalten. Der Empfänger ist an Pin2 angeschlossen, d.h. Bit0 von PortD (der Empfänger vom USART wird ja nicht benutzt). Teil des Programmcodes: Ports definieren: LDI temp, 0xF2 OUT DDRD, temp Abfragen des Pins (zum Test wird eine 6V Glühbirne anstelle vom Kran geschaltet. Eingeschaltet wird nur beim erkennen des "1" Zustandes, also kein 1ms Test): loop: SBIS PORTD,0 RJMP loop SBI PORTD,1 Das ganze habe ich im AVR Studio 4 simuliert und da klappts. Mit nem Oszillo und Logic analyzer hab ich nachgemessen, das Signal liegt korrekt an Pin 2 an. Dieser Pin ist ja nichts weiteres als ein normaler I/O Pin und wenn das Programm in der Simulation funzt kapier ich nicht wieso der Kontroller in der Praxis nicht auf ein normales 5V Signal reagiert???
Max Stephany schrieb: > loop: SBIS PORTD,0 > RJMP loop Wie wärs, den Input statt dem Output zu nehmen? Peter
Irgendwie versteh ich das jetzt gar nicht mehr, obwohl ich das vorher im Hauptprogramm versucht hatte ging es nicht. Jetzt scheint sich das Blatt gewendet zu haben, danke sehr!
Habe jedoch noch eine Frage dazu. Das PortX Register ist doch Input/Output. Warum kann ich trotzdem nicht so einlesen? Oder hat das was damit zu tun dass nicht der ganze Port als Eingang benutzt wird?
Hi >Habe jedoch noch eine Frage dazu. Das PortX Register ist doch >Input/Output. Warum kann ich trotzdem nicht so einlesen? Oder hat das >was damit zu tun dass nicht der ganze Port als Eingang benutzt wird? Das Port-Register hat zwei Funktionen: Wenn ein Pin als Eingang konfiguriert schaltet das entsprechende Bit im Portregister den Pull-Up-Widerstand des Pins. Als Ausgangspin konfiguriert wird der Pegel des Pins mit dem Bit festgelegt. Du kannst aus dem Portregister nur den Wert lesen, den du selbst reingeschrieben hast. MfG Spess
Hallo, Max Stephany schrieb: > Habe jedoch noch eine Frage dazu. Das PortX Register ist doch > Input/Output. Warum kann ich trotzdem nicht so einlesen? Oder hat das > was damit zu tun dass nicht der ganze Port als Eingang benutzt wird? Nein, hat nur mit dem zutun, was Atmel ins Datenblatt des AVR geschrieben hat. Das Register an der Adresse von PortX schreibt den Zustand der Pins, wenn sie Ausgang sind oder den Zustand der PullUps, wenn das Bit Eingang ist. Aus dem PortX-Register wird immer das gelesen, was drinsteht, also mal von Dir reingeschrieben wurde. Das Register an der Adresse von PinX liest immer den Zustand der Pins, egal, ob die Eingang oder Ausgang sind. Schreiben in PinX bewirkt entweder garnichts (mur-Lese-Register, ältere AVR) oder es toggelt den Zustand des Bits, wenn es Ausgang ist. DDR bestimmt die Datenrichtzng, also Ausgang/Eingang. Es sind also 3 Register, die zu einem Port gehören und die verschiedene Adressen haben. PORTx, PINX und DDRx sind ja letztlich nur symbolische Namen für die I/O-Adressen. Gruß aus Berlin Michael
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.