Forum: Mikrocontroller und Digitale Elektronik 12 LEDs an ATMega32 (Port A + C)


von Simon (Gast)


Lesenswert?

Hi,

ich habe an meinem ATMega32 an PortA 8 LEDs und an PortC 4 LEDs (an PC0, 
PC1, PC2, PC3). JTAG ist deaktiviert.
An PortB hängt ein LCD (HD44780), das funktioniert problemlos. Ich 
denke, das ist für das Problem nicht relevant.

Meine Schaltung betreibe ich über das ATMEL Evaluations-Board 2.0 über 
das IDE-Kabel (J4) auf meinem Steckbrett.

Mein Testcode sieht so aus:
1
int main(void)
2
{
3
  DDRA = 0xFF;
4
  DDRB = 0xFF;
5
  DDRC = 0xFF;
6
  DDRD = 0b11100000;  
7
  
8
  PORTA = 0xFF;
9
  PORTC = 0xFF;  
10
  while(1) {}
11
  return 0;
12
}
Das funktioniert, alle LEDs leuchten und an allen Pins liegen ~5V an.

Schalte ich jetzt PortC komplett aus, habe ich schon das erste seltsame 
Verhalten.
1
DDRA = 0xFF;
2
  DDRB = 0xFF;
3
  DDRC = 0xFF;
4
  DDRD = 0b11100000;  
5
  
6
  PORTA = 0xFF;
7
  PORTC = 0x00;

An PortC leuchtet jetzt wie erwartet nichts mehr, allerdings sind auch 
PA4 und PA5 betroffen. Diese leuchten nur noch ganz schwach (es liegen 
etwa 2.5V an)

Nächster Test: PortA komplett aus, PORTC komplett an.
1
DDRA = 0xFF;
2
  DDRB = 0xFF;
3
  DDRC = 0xFF;
4
  DDRD = 0b11100000;  
5
  
6
  PORTA = 0x00;
7
  PORTC = 0xFF;

Jetzt leuchten ausschließlich die hintern 2 LEDs an PortC (PC2 + PC3). 
PortA scheint aus zu sein, doch das trügt. Denn PA4 und PA5 erhalten 
etwa 2,3V => LEDs leuchten ganz schwach.

Ich habe vorher ein einfaches Lauflicht an PORTA betrieben und auch 
damit festgestellt, dass es irgendwelche Zusammenhänge zw. PA4/PA5 und 
PC2/PC3 geben muss. Die haben immer gleichzeitig geleichtet (PA4 + PC2 
und PA5 + PC3)

Leider weiß ich jetzt nicht mehr weiter. Habt ihr eine Idee? Ist mein 
Controller kaputt?

MfG
Simon

von Simon (Gast)


Lesenswert?

Habe gerade nochmal das Lauflicht getestet:
1
DDRA = 0xFF;
2
  DDRB = 0xFF;
3
  DDRC = 0xFF;
4
  DDRD = 0b11100000;  
5
  
6
  PORTA = 0x01;
7
  PORTC = 0x00; 
8
9
while(1)
10
  {   
11
    PORTA = PORTA << 1;
12
  _delay_ms(75);
13
}

Zusätzlich zum Problem, dass scheinbar ein Zusammenhang zw. diesen Pins 
besteht, leuchtet mein LCD-Display ein bisschen heller, wenn PA4 bzw. 
PA5 aktiv sind.

Es gibt also auch einen Zusammenhang mit PortB....

von GrobiG (Gast)


Lesenswert?

Kann es sein das deine 12 LEDs einfach zuviel Strom über die Ports des 
avr ziehen? 12 * sagen wir mal 20mA, sowie ich weiss ist bei den meisten 
avrs bei 200mA Schluß. Versuch doch einfach irgendeinen Treiber z.B. 
ULN2803 oder sowas zwischen PortA und die 8 leds zu schalten dann kanste 
n Strom problem schonmal ausschließen.

von Simon (Gast)


Lesenswert?

Das sind low-current-LEDs mit nur 2mA (also 24mA gesamt)

und wenn ich alle gleichzeitig aktiviere, dann leuchten sie ja... Also 
das Stromproblem schließe ich mal aus.

von GrobiG (Gast)


Lesenswert?

hmm ok, mal probiert es umzudrehen? So dass die LED leuchtet wenn der 
Pin low ist? Kann mich dunkel erinnern das es schon einen Unterschied 
macht. Des weiteren gibts da auch noch pullups aber die dürften 
eigentlich nach deinem code nicht eingeschaltet sein

von Simon (Gast)


Lesenswert?

Habe leider keine Möglichkeit, das umzudrehen. Ich kann mir aber auch 
nicht vorstellen, dass es daran liegt.

Haben denn die oben beschriebenen Pins irgendwelche Zusatzfunktionen, 
die man abschalten kann? Das Datenblatt verwirrt mich an der Stelle...

von Simon (Gast)


Lesenswert?

Sehr interessant: Ist das gesamte Board inkl. Schaltung stromlos und ich 
gehe mit dem Durchgangsprüfer einmal an A5 und einmal an C0, erhalte ich 
ein Durchgangssignal. Das selbe bei A4 und C1. ALle andere Kombinationen 
bieten keinen Durchgang. Als Widerstand zeigt mir mein Multimeter bei 
Durchgang ca. 2 Ohm an.

Stecke ich das 40polige Kabel (J4) vom Pollinboard ab, erhalte ich 
keinen Durchgang mehr. Somit lässt sich ein Lötfehler auf meinem Adapter 
(fürs Steckbrett) ausschließen. Jetzt teste ich noch, ob ich ebenfalls 
einen Durchgang habe, wenn der Controller vom Board genommen wird.

von Simon (Gast)


Lesenswert?

Das Ergebnis vom Test: Auch ohne Controller auf dem Board gibt es einen 
Kontakt zwischen den Pins. Meine Vermutung: Platine (Pollin-Platine) 
defekt?

von Simon (Gast)


Lesenswert?

Sooo, das Problem wurde lokalisiert und behoben!!!
Es lag tatsächlich am Pollin-Board. Mein Code war die ganze Zeit korrekt 
(zum Glück)

Ich bin mit dem Multimeter an die Platine und hab die Pins direkt am 
Board nachgemessen. Es gab eine Verbindung zwischen den besagten Pins. 
Also machte ich mich auf die Suche nach dem Fehler und schaute ins 
Handbuch.

Das war der entscheidende Schritt, denn dort sah ich, dass es 2 Jumper 
gibt (JP11 und JP12), die scheinbar eine Verbindung mit den Pins haben. 
Diese Jumper habe ich entfernt und jetzt funktioniert es.

Die Frage ist jetzt: Ist das Verhalten erwünscht oder habe ich einfach 
schlampig gelötet? Die Kontakte sehen eigentlich alle sauber aus.

Es wäre hilfreich, wenn von euch jemand auf seinem Board nachschauen 
könnte :-)

von Simon (Gast)


Lesenswert?

Hat wohl keiner die 2.0er :-)

von Simon (Gast)


Lesenswert?

Ich habe das gerade mit dem Board von einem Freund getestet. Er hat 
genau das selbe Problem, ohne die 2 Jumper funktioniert es.

Ein Lötfehler kann also ausgeschlossen werden.

Hat jemand eine Idee, ob das von Pollin bewusst so gemacht wurde?

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.