www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Code mit Invertierten Werten für die Ports geht nicht.


Autor: Felix Nachname (time2ride)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein wirklich seltsames Problem:

Folgender Code
  PLED |= (1<<LED1 | 1<<LED2 | 1<<LED3 | 1<<LED4 | 1<<LED5 | 1<<LED6); //Zuerst alle LEDs aus
  switch(farbe[array_pos]){ //Dann entsprechende LED wieder einschalten
    case 1:  PLED &= ~(1<<LED1);  break;
    case 2:  PLED &= ~(1<<LED2);  break;
    case 3:  PLED &= ~(1<<LED3);  break;
    case 4:  PLED &= ~(1<<LED4);  break;
    case 5:  PLED &= ~(1<<LED5);  break;
    case 6:  PLED &= ~(1<<LED6);  break;
  }
funktioniert einwandfrei.
Kehre ich den Code nun um, so dass statt 1er 0er geschrieben werden und 
umgekehrt, geht das ganze nicht mehr, soll heißen der Mega8 kommt ins 
"Stolpern" (Macht undefinierbare Dinge).
Das hier geht nicht:
  PLED &= ~(1<<LED1 | 1<<LED2 | 1<<LED3 | 1<<LED4 | 1<<LED5 | 1<<LED6); //Zuerst alle LEDs aus
  switch(farbe[array_pos]){ //Dann entsprechende LED wieder einschalten
    case 1:  PLED |= (1<<LED1);  break;
    case 2:  PLED |= (1<<LED2);  break;
    case 3:  PLED |= (1<<LED3);  break;
    case 4:  PLED |= (1<<LED4);  break;
    case 5:  PLED |= (1<<LED5);  break;
    case 6:  PLED |= (1<<LED6);  break;
  }

Hat jemand eine Idee, warum das so ist?

Autor: Felix Nachname (time2ride)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ERGÄNZUNG:
Kann es damit zusammenhängen, dass an den Ausgängen 7 MOSFETs hängen, 
die dann gleichzeitig geschalten werden und dadurch vllt. der Strom 
durch den Mega kurzzeitig zu groß wird und er dadurch abschmiert?

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher das deine Mosfet richtig angeschlossen sind? Da du den Code 
geändert hast denke ich mal das auch die Beschaltung sich geändert hat. 
Schaltplan wäre hilfreich. Ansonsten, miss doch einfach mal direkt an 
den Pins ob da rauskommt was du willst.

Autor: Felix Nachname (time2ride)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nein, nein, das ist ja das Problem, an der Beschaltung hat sich 
überhaupt nichts geändert.
Zum Anhang:
Die Transistoren sind vom Typ IRLU 2905. R_Pullup kann auch weggelassen 
werden, ändert sich nichts...
Der unterste Transistor wird mit PWM angesteuert. So kann man die LEDs 
dimmen.

Es war nur so, dass ich den Code auf einem STK500 mit Low-aktiven LEDs 
gecodet habe aber jetzt eben mit den MOSFETs High-aktive ausgänge habe. 
Und auf dem STK500 lief das Programm auch einwandfrei.

Autor: Felix Nachname (time2ride)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ANMERKUNG:

Bei niedriger Frequenz läuft das Programm...
weitere Diskussion hier: 
Beitrag "Mega8 läuft mit 2MHz wie er soll, mit 8MHz nicht mehr."

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.
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.