Datum:
Angehängte Dateien:Hallo liebe Mikrocontroller Freunde, ich habe eine Frage. Ich versuche grade mit einem ATmega 128 ein digitalen Eingang einzulesen. Folgende Syntax wird verwendet:
DDRC=0x00; // PORTC als Eingang festlegen while(1) { if (PINC & (1 << PC0)) { lcd_setcursor( 0, 1 ); lcd_string("Motor: I"); } else { lcd_setcursor( 0, 1 ); lcd_string("Motor: 0"); } } |
Ich habe die PINs von PORTC (PIN0,PIN1,PIN3) an den analogen Pegel von den Kippschaltern anliegen. Ich versuche per Abfrage den Zustand zu prüfen und möchte dann in meinem programmierten LC-Display diese Information 0/1 anzeigen. Bei meinem ATxmega funktioniert das einwandfrei! mit folgender Eingabe:
Motor_EN = PORTE.IN & 0x01; // Motor Enable PIN0 PORTE Motor_Richtung = PORTE.IN & 0x02; // Motor Richtung PIN1 PORTE |
Danke im voraus
Datum:
Liegt auf PORTC ab Werk nicht das JTAG Interface und muss man das nicht erst per Fuse abschalten, wenn man PORTC als normale GIO-Pins benutzen will?
Datum:
Nee, vergiss das wieder. Das ist bei den kleineren Atmega so. http://circuits.datasheetdir.com/18/ATMEGA128-pinout.jpg Anderer Schrotschuss: Ist der Atmega128 in Wirklichkeit noch ein getarnter Atmega103 (M103C Fuse in Werkseinstellung)? Dann würde es aber Abstürze beim Rückkehr von den Funktionen geben (falscher Stack) und auf dem LCD dürfte nix zu sehen sein. BTW. Ist was zu sehen, obwohl die Initialisierung des LCD fehlt? Ganz doofe Frage: Das LCD hängt auch nicht an dem PC0 Pin?
Datum:
Zumindest mein Mega1284p den ich letztens erst erworb hatte Jtag von Werk aus aktiviert. Und imho gibts da auch den 103er Modus nicht mehr. Vielleicht benutzt der Te ja so einen?
Datum:
Samuel K. schrieb: > 128 != 1284 > Der 1284 kommt aus der 164/324/644 Serie schon klar. Aber wenn der TE sein Projekt erst vor kurzem mit seinem Projekt begonnen hat und den uC auch neu gekauft hat dann hat er wahrscheinlich einen 1284P. Vielleicht hält er diesen kleinen Zusatz ja für unwichtig und lies ihn im Eröffnungsbeitrag deshalb weg.
Datum:
Hi >Aber wenn der TE sein Projekt erst vor kurzem mit seinem Projekt >begonnen hat und den uC auch neu gekauft hat dann hat er wahrscheinlich >einen 1284P. ATMega128 und ATMega1284(P) haben nichts miteinander zu tun: http://www.atmel.com/Images/doc2467.pdf http://www.atmel.com/Images/doc8272.pdf MfG Spess
Datum:
Hi,
sorry war im Ausland und habe jetzt erst den Thread verfolgt.
Zu deiner Frage:
>Das LCD hängt auch nicht an dem PC0 Pin?
Nein das LCD hängt an Port D und Port C möchte ich als Eingang nutzen.
Mir geht es um die Syntax.DDRC=0x00; // PORTC als Eingang festlegen while(1) { if (PINC & (1 << PC0)) { lcd_setcursor( 0, 1 ); lcd_string("Motor: I"); } else { lcd_setcursor( 0, 1 ); lcd_string("Motor: 0"); } } |
Mit DDRC=0x00 setze ich den Port C auf Eingang und mit der If Abfrage möchte ich den Zustand abfragen und eine entsprechende Ausgabe per Display. Ich habe keine Ahnung mit den Fuses ? Ich habe beim ATXmega keine Fuses beachtet etc.
Datum:
Die Syntax ist OK. Offen ist, wie deine Schaltung aussieht, insbesondere was dir das log. Signal an PC0 erzeugt. Kann es sein, dass du einen Pull-Up oder Pull-down Widerstand brauchst, um die log. Signalpegel an PC0 einzulesen? => http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
Datum:
Johannes schrieb: > Ich habe keine Ahnung mit den Fuses ? Dann wirds Zeit. Bei einem M128 MUSST du an die Fuses ran. Ab Werk ist die M-103 Fuse gesetzt und wenn man die nicht wegnimmt, kann man den µC nicht als M128 betreiben. Dann geht der erste Funktionsaufruf in die Hose. Du verwendest Funktionen (lcd) also MUSST du die M-103 Fuse abschalten. > Ich habe beim ATXmega keine Fuses beachtet etc. Das ist kein Argument.
Datum:
Karl Heinz Buchegger schrieb: > Bei einem M128 MUSST du an die Fuses ran. Oder man wählt beim AVR-GCC den Mega103 als Target aus und fährt mit angezogener Handbremse. Peter
