www.mikrocontroller.net

Forum: GCC ATmega 128 EIngänge verwenden


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Johannes (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Krapao (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Krapao (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Meisel (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Sam .. (sam1994)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
128 != 1284
Der 1284 kommt aus der 164/324/644 Serie

Autor: Meisel (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Johannes (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.
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.

Autor: Krapao (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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-Tu...

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net