Forum: Compiler & IDEs ATmega 128 EIngänge verwenden


von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Mikrocontroller Freunde,

ich habe eine Frage.

Ich versuche grade mit einem ATmega 128 ein digitalen Eingang 
einzulesen.
Folgende Syntax wird verwendet:
1
DDRC=0x00; // PORTC als Eingang festlegen
2
3
while(1) {   
4
 
5
if (PINC & (1 << PC0)) 
6
{
7
lcd_setcursor( 0, 1 );
8
lcd_string("Motor: I");
9
} 
10
else
11
{
12
lcd_setcursor( 0, 1 );
13
lcd_string("Motor: 0");
14
}
15
16
}

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:
1
Motor_EN  = PORTE.IN & 0x01;   // Motor Enable   PIN0 PORTE
2
Motor_Richtung  = PORTE.IN & 0x02;   // Motor Richtung PIN1 PORTE


Danke im voraus

von Krapao (Gast)


Lesenswert?

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?

von Krapao (Gast)


Lesenswert?

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?

von Meisel (Gast)


Lesenswert?

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?

von Sam .. (sam1994)


Lesenswert?

128 != 1284
Der 1284 kommt aus der 164/324/644 Serie

von Meisel (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Johannes (Gast)


Lesenswert?

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.
1
DDRC=0x00; // PORTC als Eingang festlegen
2
3
while(1) {   
4
 
5
if (PINC & (1 << PC0)) 
6
{
7
lcd_setcursor( 0, 1 );
8
lcd_string("Motor: I");
9
} 
10
else
11
{
12
lcd_setcursor( 0, 1 );
13
lcd_string("Motor: 0");
14
}
15
16
}

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.

von Krapao (Gast)


Lesenswert?

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-Tutorial#Taster_und_Schalter

von Karl H. (kbuchegg)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.