ATmega 128 EIngänge verwenden

Gast #2640819
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
Angehängte Dateien:
Gast #2641117
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?
Gast #2643272
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.
Gast #2684892
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.
#2685603
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren