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


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.
von Chris N. (capielectronics)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
🙄🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️ Das Wurde bereits in 1000Threads 
abgehandelt

von Chris N. (capielectronics)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank !

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

War auch eher ein (unlustiger) Witz.

von Antuino (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Unwillige Pins kann man durch Anlegen von 12 V auf korrektes Verhalten 
konditionieren.

von Chris N. (capielectronics)


Bewertung
0 lesenswert
nicht lesenswert
> Unwillige Pins kann man durch Anlegen von 12 V auf korrektes Verhalten
> konditionieren.

haha :D

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.