Forum: Mikrocontroller und Digitale Elektronik AVR // Arduino UNO // Code macht nicht das, was er soll


von Chris N. (capielectronics)


Lesenswert?

Liebe µC begeisterten,

Ich habe mir vor kurzem einen Arduino UNO gekauft, mit der Intention, 
Die Programmiersprache C mit spaß/praxis bezogen zu erlernen.
Entsprechend bin ich relativ neu in der Thematik.
Jedenfalls habe ich nun die ersten Codes geschrieben, welche auch 
funktionieren, bis ich nun zum Punkt gekommen bin einen Code zu 
schreiben, welcher je nach dem ob an PIND 0x10 High oder Low anliegt, 
jeweils die
PINS auf PORTD entweder auf 0x0F oder 0x00 legt.
Nun zum Problem.
die IF-bedingung funktioniert nur teilweise.
Wenn ich an PIND 0x10 ein HIGH "auslöse" kommt es dazu, dass die 
Ausgänge
0b00001111 auf High gehen (also wie ich es will). Lege ich jedoch den 
Pin auf LOW Pegel, so reagiert mein µC (Atmega328P-PU) nur mit einer 
gefühlten Wahrscheinlichkeit von 50%, also gefühlt abhängig von der 
Laune des µC.
Hier zu meinem Code:


int main(void)
{
  DDRD = 0x0F;
  PORTD = 0x00;

    while (1)
    {
    if(PIND & 0x10)
    {
      PORTD |= 0x0F;
    }
    else
    {
      PORTD |= 0x00;
    }
    }
}



/* Liegt dies nun an meinem Code? oder kann das auch andere Ursachen 
haben?
bin wie gesagt neu in dem Gebiet und würde mich über nette antworten 
sehr sehr freuen, da das aktuell mein Projekt einwenig zum erliegen 
bringt. */

von da1l6 (Gast)


Lesenswert?

Chris N. schrieb:
> PORTD |= 0x00;

Die Zeile tut rein gar nichts. Siehe: 
https://www.mikrocontroller.net/articles/Bitmanipulation#Standard_C_2

da1l6

von Qwertz332 (Gast)


Lesenswert?

??‍♂️?‍♂️?‍♂️?‍♂️?‍♂️?‍♂️?‍♂️?‍♂️ Das Wurde bereits in 1000Threads 
abgehandelt

von Chris N. (capielectronics)


Lesenswert?

Vielen Dank !

von Wolfgang (Gast)


Lesenswert?

Chris N. schrieb:
> Lege ich jedoch den
> Pin auf LOW Pegel, so reagiert mein µC (Atmega328P-PU) nur mit einer
> gefühlten Wahrscheinlichkeit von 50%, also gefühlt abhängig von der
> Laune des µC.

Das ist ein bisschen erstaunlich. Soweit ich das übersehe, dürfte er auf 
LOW gar nicht reagieren, wenn vorher mal HIGH anlag.

von Chris N. (capielectronics)


Lesenswert?

> Das ist ein bisschen erstaunlich. Soweit ich das übersehe, dürfte er auf
> LOW gar nicht reagieren, wenn vorher mal HIGH anlag.

Jetzt im Nachhinein, wo ich meinen Fehler sehe, finde ich es auch 
erstaunlich. Vielleicht hat mein Code den µC dermaßen verwirrt, dass er 
einfach nach Lust und Laune gehandelt hat :D.
Vielen Dank für eure schnellen Antwroten!!
Es funktioniert jetzt, wie ich es wollte!

von Tiefer Fall (Gast)


Lesenswert?

Chris N. schrieb:
> Vielleicht hat mein Code den µC dermaßen verwirrt, dass er
> einfach nach Lust und Laune gehandelt hat :D.

Ich will mich jetzt nicht zu weit aus dem Fenster lehnen, aber: Nein.

von Chris N. (capielectronics)


Lesenswert?

> Ich will mich jetzt nicht zu weit aus dem Fenster lehnen, aber: Nein.

War auch eher ein (unlustiger) Witz.

von Antuino (Gast)


Lesenswert?

Unwillige Pins kann man durch Anlegen von 12 V auf korrektes Verhalten 
konditionieren.

von Chris N. (capielectronics)


Lesenswert?

> Unwillige Pins kann man durch Anlegen von 12 V auf korrektes Verhalten
> konditionieren.

haha :D

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.