Forum: Mikrocontroller und Digitale Elektronik AtMega162 Portprobleme!


von Jan (Gast)


Lesenswert?

Kurze Frage damit ich meinen Fehler irgendwie finde .
Ich deklariere wie folgt :

DDRA  = 0b11111100;
PORTA = 0b10000011;

also PA1 und PA0 auf Eingang .
Den Eingang frage ich dann folgendermaßen ab :

if (!(PINA & 0b00000001))
  {
           ...
         }

allerdings springt er immer wieder in die If Schleife obwohl ich den 
Taster gar nicht gedrückt habe .
Alles an einem AtMega162 betrieben .

Kann mir da jemand mal eben auf die Sprünge helfen ?!

von Oliver J. (skriptkiddy)


Lesenswert?

Wie ist denn Dein Taster angeschlossen?

von Jan (Gast)


Lesenswert?

Ganz normal . Wird er gedrückt wird GND durchgeschleift .

von Oliver J. (skriptkiddy)


Lesenswert?

Hast du externe Pullups dran?

Falls nicht: Schreibst du an irgendeiner anderen Stelle im Code das 
PORTA-Register und deaktivierst damit vllt die internen Pullups?

von Jan (Gast)


Lesenswert?

wenn ich PORTA  = 1 << 7; schreibe heißt das das ich
0b01000000 erhalte ? wenn mein Ausgangscode 0b00000000 war ? .
Kommer da irgendwie immer wieder durcheinandern :S .
Aber das könnte das Problem sein .

von Oliver J. (skriptkiddy)


Lesenswert?

Jan schrieb:
> wenn ich PORTA  = 1 << 7; schreibe heißt das das ich
> 0b01000000 erhalte ?
nein du erhältst 0b10000000, denn du shiftest die 0b00000001 7 mal nach 
links. Danach steht die 1 im höchsten Bit.

> wenn mein Ausgangscode 0b00000000 war ?
egal was vorher in PORTA drin war, ist nach der Zuweisung komplett mit 
(1<<7) überschrieben.

Hast du nun externe Pullups dran?

von Jan (Gast)


Lesenswert?

Skript Kiddy schrieb:
>> wenn mein Ausgangscode 0b00000000 war ?
>
> egal was vorher in PORTA drin war, ist nach der Zuweisung komplett mit
>
> (1<<7) überschrieben.


Aha ok das ist mein Problem dann habe ich mir damit immer den PullUp 
versaut .
Dachte er würde egal wie es vorher aussah dann nur die 1 an Stelle 8 
schreiben.
Wie kann ich denn ein Bit setzen ohne den Rest zu ändern ?

von Jan (Gast)


Lesenswert?

Keine externen Pullups übrigens

von Oliver J. (skriptkiddy)


Lesenswert?

setzen

PORTA = PORTA | (1<<7);   kürzer  PORTA |= (1<<7);


löschen

PORTA = PORTA & ~(1<<7);  kürzer  PORTA &= ~(1<<7);

von Oliver J. (skriptkiddy)


Lesenswert?

Jan schrieb:
> allerdings springt er immer wieder in die If Schleife obwohl ich den
> Taster gar nicht gedrückt habe .

achja schau mal hier hin:

http://www.if-schleife.de/

SCNR :)

von Jan (Gast)


Lesenswert?

An der einen Stelle hat's geklappt an der anderen nicht .
Wenn ich

DDRC  = 0b11111111;
PORTC = 0b00000000;
deklariere soll mit

PORTC|=(1<<6);

eine LED angehen .
Allerdings geht PC1  und nicht PC 6 auf high ?! .
Wieso ?! :( .

von Oliver J. (skriptkiddy)


Lesenswert?

Ist JTAG per fusebit aktivert? Dann kannst du nämlich PC7:PC4 nicht 
schreiben, weil die Pins für JTAG verwendet werden.

Poste mal den gesamten Code als Dateianhang. Da kann ich mal schauen was 
da schief läuft.

von Jan (Gast)


Lesenswert?

Schon Problem gelöst hatte ein Datenblatt mit falsche Pin Belegung . 
Mist google .

von Oliver J. (skriptkiddy)


Lesenswert?

Bitte habe dir gerne geholfen.

von Jan (Gast)


Lesenswert?

Skript Kiddy schrieb:
> Bitte habe dir gerne geholfen.

Allerdings ich danke dir vielmals .War eben nur so euphorisch das ich 
schnell alles ändern musste .
Also vielen Dank nochmal ohne dich hätte ich ewig gesucht .
Ich habe zwar gerade das neue Problem das ich die Pullups vom PORTA 
nicht an bekomme obwohl richtig gesetzt aber naja bekomme ich 
hoffentlich hin .
PORTA kann hoffentlich überhaupt auch als Eingang verwendet werden :S

von Jan (Gast)


Lesenswert?

Wollte im übrigen PA0 und PA1 als Eingang nutzen aber wie gesagt schein 
nicht zu gehen .

von Oliver J. (skriptkiddy)


Lesenswert?

Jan schrieb:
> PORTA kann hoffentlich überhaupt auch als Eingang verwendet werden :S

Ja kann er.

Bitte poste mal deinen Code. Ich hab meine Glaskugel nämlich aufgrund 
von Hitzeproblemen zurück in den Schrank gepackt. Aber bitte den Code 
als Anhang.

von Jan (Gast)


Lesenswert?

Ja der Quelltext ist leider etwas sehr umfangreich und vielleicht auch 
unübersichtlich .
Habe einen neuen Controller genommen und siehe da es klappt .
Hab beim rumprobieren vermutlich die Pullups gekillt :S

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.