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


von Felix N. (time2ride)


Lesenswert?

Ich habe ein wirklich seltsames Problem:

Folgender Code
1
  PLED |= (1<<LED1 | 1<<LED2 | 1<<LED3 | 1<<LED4 | 1<<LED5 | 1<<LED6); //Zuerst alle LEDs aus
2
  switch(farbe[array_pos]){ //Dann entsprechende LED wieder einschalten
3
    case 1:  PLED &= ~(1<<LED1);  break;
4
    case 2:  PLED &= ~(1<<LED2);  break;
5
    case 3:  PLED &= ~(1<<LED3);  break;
6
    case 4:  PLED &= ~(1<<LED4);  break;
7
    case 5:  PLED &= ~(1<<LED5);  break;
8
    case 6:  PLED &= ~(1<<LED6);  break;
9
  }
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:
1
  PLED &= ~(1<<LED1 | 1<<LED2 | 1<<LED3 | 1<<LED4 | 1<<LED5 | 1<<LED6); //Zuerst alle LEDs aus
2
  switch(farbe[array_pos]){ //Dann entsprechende LED wieder einschalten
3
    case 1:  PLED |= (1<<LED1);  break;
4
    case 2:  PLED |= (1<<LED2);  break;
5
    case 3:  PLED |= (1<<LED3);  break;
6
    case 4:  PLED |= (1<<LED4);  break;
7
    case 5:  PLED |= (1<<LED5);  break;
8
    case 6:  PLED |= (1<<LED6);  break;
9
  }

Hat jemand eine Idee, warum das so ist?

von Felix N. (time2ride)


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?

von Nico (Gast)


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.

von Felix N. (time2ride)


Angehängte Dateien:

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.

von Felix N. (time2ride)


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."

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.