Forum: Mikrocontroller und Digitale Elektronik AVR µC funktionieren nicht - grundlegende Fehlersuche


von Tüll (Gast)


Lesenswert?

So, nochmal mit besserem Threadtitel.

Das simpelste Programm das ich schreiben konnte (LED leuchten lassen)
läuft nicht. Programm mit AVRStudio in µC laden geht fehlerfrei (mit 
ATmega328p und ATtiny13a probiert, jeweils auch mit einem unbenutzten).
Aber die Pins sind einfach stumm (hochohmig). Wenn ich die LED an einen
der Programmierpins stecke flackert sie beim programmieren, aber danach
leuchtet sie nicht, obwohl alle Programmierpins auch Teil von PORTB
sind.

Ich hab nichts an den Fuses rumgepfuscht. Die brandneuen µC die ich 
probiert habe, haben sogar noch CKDIV8 gesetzt weil sie nie benutzt 
wurden. Alle laufen und liefen immer mit internem Takt von 8 bzw 9.6 
MHz.

Kann mir bitte jemand sagen, dass das Programm ok ist?
Wo weitersuchen? Ist mein Steckbrett vielleicht kaputt? Virus im µC?

1
#include <avr/io.h>
2
3
4
int main (void) {
5
6
7
  DDRB = 0xff;                
8
9
  PORTB = 0xff;
10
11
  while(1) {
12
13
  }
14
15
  return 0;
16
17
}


Und als Ergänzung: Um zu überprüfen ob der µC überhaupt selbständig 
läuft nach der Programmierung, habe ich jetzt mal beim ATmega328p die 
Fuse CKOUT gesetzt damit der Prozessortakt am Pin 14 (PB0) ausgegeben 
wird. Multimeter zeigt knapp 8 MHz dort an. Die LED leuchtet wenn ich 
sie dort einstecke. Grundsätzlich ist der Port also funktionsfähig, 
liefert genug Strom und die CPU läuft. Also wieso kann ich 
Softwaremässig keinen Port einschalten?

Gibt es in AVRStudio eine Möglichkeit was zu verpfuschen, so dass das 
Programm nicht automatisch gestartet wird? Irgendwelche Bootloader 
Optionen die Probleme machen wenn man keinen Bootloader hat?

Sonst schmeiss ich den ganzen Kram in die Tonne :(

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

/RESET auf High?
Externen Takt eingeschaltet?
Spannung?

Mit freundlichen Grüßen,
Valentin Buck

von Uwe .. (uwegw)


Lesenswert?

Lass die LEDs doch mit ner _delay_ms()-Schleife blinken, das ist dann 
zuverlässiger von einem nicht laufenden µC zu unterscheiden.

Ansonsten würde ich mal den Pegel am Reset-Pin messen, und ggf. einen 
Pullup einbauen.

PS: welches Programmiergerät?

von philipp (Gast)


Lesenswert?

ist das programm richtig auf den  kontrollör programmiert? wie ist die 
led angeschlossen? was sagt dein multimeter

von Serieller (Gast)


Lesenswert?

Bei dem gezeigten Programm sollte an den I/O-tauglichen Pins von Port B 
jeweils ein dauerhafter HIGH Spannungspegel zu messen sein.

Mit einer Widerstandsmessung
> Aber die Pins sind einfach stumm (hochohmig).
bist du mit den falschen Waffen unterwegs.

Auch ein dynamisches Flackern solltest du nicht erwarten bzw. wäre das 
ein Zeichen für eine Fehlfunktion.

von Peter H. (the_ride)


Lesenswert?

Hi!

Versuch es doch mal hiermit.
1
/*
2
 * main.c
3
 *
4
 *  Created on: 03.09.2009
5
 *      Author: The_ride
6
 */
7
8
#include <avr/io.h>
9
#include <stdint.h>
10
#include <util/delay.h>
11
12
13
int main(void)
14
{
15
  DDRB = 0xff;
16
17
    while(1)
18
  {
19
20
    {
21
22
      PORTB=0b000000001;
23
24
25
     {
26
          _delay_ms(100);
27
       }
28
29
      PORTB=0b000000000;
30
31
32
     {
33
          _delay_ms(100);
34
       }
35
36
37
38
  }
39
40
}
41
}

cya The_ride
Peter

von C-Freak (Gast)


Lesenswert?

Oder etwas lesbarer, und auch mit einfachem Spannungsmesser noch zu 
"sehen":
1
while(1)  {
2
   PINB = 0x01;    // toggle pin
3
   _delay_ms(1000); // sleep a while
4
}

von Tüll (Gast)


Lesenswert?

Danke für eure Vorschläge. Aber lest bitte meinen ersten Beitrag 
komplett durch. Die grundlegenden Sachen habe ich ja schon probiert.


Programmer hab ich diesen hier:
http://shop.myavr.ch/Programmer/mySmartUSB%20MK3.htm?sp=article.sp.php&artID=100058

Reset hab ich schon mit und ohne Pull-up probiert.
Spannungsversorgung ist ok. Ich hab diverse Quellen genommen (vom 
Programmer mit 3.3V und 5V, Knopfzelle mit 3V).



Bitte gebt mir keinen neuen C-Code der komplexer ist als meiner. In 
meinem Programm ist kein Fehler, oder? (ich weiss es eigentlich aber 
weils nicht funktioniert... vielleicht bin ich einfach blind).
Es muss ja nichts blinken. Ich hab keine hohen Ansprüche. Es soll nur 
"etwas" an einem Pin feststellbar sein. Ich hab auch schon den Port low 
geschaltet und die LED von VCC an Pin angeschlossen. Und ich hab immer 
auch die LED umgedreht (nur um sicher zu sein) und auch an diversen Pins 
probiert.

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

C-Freak schrieb:
> while(1)  {
>    PINB = 0x01;    // toggle pin
>    _delay_ms(1000); // sleep a while
> }

Nö, eher so:
1
while(1){
2
    PORTB ^= 0xFF;
3
    _delay_ms(1000);
4
    }

Das geht auch noch mit älteren µCs.

Mit freundlichen Grüßen,
Valentin Buck

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Sekunde mal:
VORWIEDERSTAND?
Siehe LED...

Mit freundlichen Grüßen,
Valentin Buck

von Tüll (Gast)


Lesenswert?

Serieller schrieb:
> Bei dem gezeigten Programm sollte an den I/O-tauglichen Pins von Port B
> jeweils ein dauerhafter HIGH Spannungspegel zu messen sein.

Genau.

>
> Mit einer Widerstandsmessung
>> Aber die Pins sind einfach stumm (hochohmig).
> bist du mit den falschen Waffen unterwegs.

Naja, sagt doch schon was aus. Nachdem ich keine Spannung gemessen habe, 
hab ich versucht die Pins auf low zu schalten und LED an VCC - aber sie 
"schlucken" auch keinen Strom. Sind also hochohmig wie in 
"uninitialisiertem" Zustand.

>
> Auch ein dynamisches Flackern solltest du nicht erwarten bzw. wäre das
> ein Zeichen für eine Fehlfunktion.

Logisch flackert die Leitung beim Programmieren.

von Tüll (Gast)


Lesenswert?

Valentin Buck schrieb:
> Sekunde mal:
> VORWIEDERSTAND?
> Siehe LED...
>
> Mit freundlichen Grüßen,
> Valentin Buck

Ach komm. Wie hilft mir der Hinweis jetzt? Ich wär schon glücklich wenn 
ich eine LED durchbrennen könnte.
Aber zu deiner Beruhigung, ich habe ne blaue LED die 3.6V will and der 
3.3V Spannung betrieben ohne Vorwiderstand. Zwischendurch auch mal eine 
rote LED MIT Vorwiderstand.

von M. H. (elektroniktueftler)


Lesenswert?

Schaltplan posten, dann kann man mehr sagen

von Peter H. (the_ride)


Lesenswert?

Hi!

Wie wäre es denn wenn du mal ein Foto von deinem Aufbau zeigst, evtl. 
ist ja was falsch angeschlossen ?!

cya The_ride
Peter

von Tüll (Gast)


Angehängte Dateien:

Lesenswert?

Voila

Oben links ist eine rote LED die einfach Betriebsspannung anzeigt.

An den Stecker kommt mein Programmer über ein 6-poliges ISP Kabel. Die 
blaue LED ist jetzt nicht drauf, hab sie and diversen Pins probiert und 
wie gesagt in allen Varianten.

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Tüll schrieb:
> Ach komm. Wie hilft mir der Hinweis jetzt? Ich wär schon glücklich wenn
> ich eine LED durchbrennen könnte.

Ohne Vorwiederstand sinkt die Spannung am µC drastisch.
Wenn er dadruch nicht kaputt geht, geht er aus.
Hast du den Programmierer im Betrieb da immer dran, und zieht der Reset 
auch auf HIGH?
Versuchs mal mit einem 1-10k Wiederstand nach + vom Pin aus.

Außerdem fehlen Abblockkondensatoren...

Hast du wirklich den internen Takt gesetzt?

Mit freundlichen Grüßen,
Valentin Buck

von Peter H. (the_ride)


Lesenswert?

Hi!

Der Reset Widerstand fehlt 10k zu Plus PortC6 (Pin1)

Hier steht wie er angeschlossen werden muß
http://www.dieelektronikerseite.de/uC%20Ecke/Lections/Der%20ATMega8%20-%20Ein%20intelliger%20Kaefer.htm

cya The_ride

von Thomas (kosmos)


Angehängte Dateien:

Lesenswert?

Schau dir mal das Diagramm an, schätze mal ungefähr ab wieviel Strom die 
LED bei 5V schluckt und schau nochmal wieviel mA du einem Pin 
abverlangen darfst. Stellst sich dann nur noch die Frage wer überlebt es 
länger der Pin oder die LED, wenn du verdammt viel Glück hast (oder 
extra vorgesorgt hast) bricht aber auch nur deine Versorgungsspannung 
zusammen und alles bleibt heil.

Das Programm selber kann man doch im AVR-Studio durchsimulieren bzw. die 
Fehlermeldungen auswerten falls es garnicht zum simulieren kommt.

von Tüll (Gast)


Lesenswert?

Danke Valentin dass du mir helfen willst, aber du stellst Fragen die ich 
schon beantwortet habe.

In der Variante wie abgebildet lass ich den Programmer dran für die 
Stromversorgung von 3.3V (hab auch schon alle schwarzen Kabel abgezogen 
zum testen). Hab auch schon ohne Programmer nur mit einer 3V Batterie 
getestet.

Der Programmer zieht Reset nach LOW beim programmieren. Sonst macht der 
da meines Wissens nichts. Spannung am Resetpin ist um die 5V (auch bei 
3.3V VCC was mich erstaunt hat). Als ich zusätzlich noch einen Pullup 
angeschlossen habe kam sie etwas runter auf einen Wert zwischen 3.3V und 
5V.

Ja Takt ist wirklich intern. Lies mal meinen ersten Beitrag.

Abblockkondensatoren, sind die echt essenziell? (kann ja sein, ich bin 
Neuling) Dachte um bloss eine LED leuchten zu lassen geht das auch so 
(die LED zieht 12mA übrigens bei 3.3V).

Du meinst ich hab jetzt alle meine µC kaputt gemacht wegen fehlendem 
Vorwiderstand? Würde mich sehr erstaunen wenn doch nur 12mA fliessen bei 
3.3V. Ich meine bei 5V und korrekt dimensioniertem Vorwiderstand würden 
20mA fliessen, das wäre ja eine höhere Belastung. Liege ich falsch?

von Tüll (Gast)


Lesenswert?

Peter Hartmann schrieb:
> Hi!
>
> Der Reset Widerstand fehlt 10k zu Plus PortC6 (Pin1)
>
> Hier steht wie er angeschlossen werden muß
> http://www.dieelektronikerseite.de/uC%20Ecke/Lecti...
>
> cya The_ride

Wie geschrieben, den hatte ich auch schon dran, hat nichts geändert. 
Aber ich hab früher immer ohne den Pullup gearbeitet. Ist auch nicht 
verboten laut ATMEL, es wird nur störungsanfälliger (es ist ein interner 
Pullup vorhanden).

von Tüll (Gast)


Lesenswert?

Thomas O. schrieb:
> Schau dir mal das Diagramm an, schätze mal ungefähr ab wieviel Strom die
> LED bei 5V schluckt und schau nochmal wieviel mA du einem Pin
> abverlangen darfst. Stellst sich dann nur noch die Frage wer überlebt es
> länger der Pin oder die LED, wenn du verdammt viel Glück hast (oder
> extra vorgesorgt hast) bricht aber auch nur deine Versorgungsspannung
> zusammen und alles bleibt heil.

Hab ich nie gemacht (5V an LED).

>
> Das Programm selber kann man doch im AVR-Studio durchsimulieren bzw. die
> Fehlermeldungen auswerten falls es garnicht zum simulieren kommt.

Es gibt keine Fehlermeldungen. Die Simulation läuft wie gewünscht.

von Tüll (Gast)


Lesenswert?

Um mal etwas zu steuern. Das scheint mir doch der springende Punkt:


aus dem ersten Beitrag:

"Und als Ergänzung: Um zu überprüfen ob der µC überhaupt selbständig
läuft nach der Programmierung, habe ich jetzt mal beim ATmega328p die
Fuse CKOUT gesetzt damit der Prozessortakt am Pin 14 (PB0) ausgegeben
wird. Multimeter zeigt knapp 8 MHz dort an. Die LED leuchtet wenn ich
sie dort einstecke. Grundsätzlich ist der Port also funktionsfähig,
liefert genug Strom und die CPU läuft. Also wieso kann ich
Softwaremässig keinen Port einschalten?

Gibt es in AVRStudio eine Möglichkeit was zu verpfuschen, so dass das
Programm nicht automatisch gestartet wird? Irgendwelche Bootloader
Optionen die Probleme machen wenn man keinen Bootloader hat?"

von Stefan E. (sternst)


Lesenswert?

Bitte mal die lss-Datei posten.

von holger (Gast)


Lesenswert?

>Abblockkondensatoren, sind die echt essenziell?

Ja.

>Gibt es in AVRStudio eine Möglichkeit was zu verpfuschen, so dass das
>Programm nicht automatisch gestartet wird?

Ja, man kompiliert das Programm für den falschen Prozessor und/oder
wählt die falsche HEX Datei aus.

von Tüll (Gast)


Lesenswert?

OK, Kondensatoren. Einen möglichst grossen Elko? Oder verschiedene?

lss Datei?

von Stefan E. (sternst)


Lesenswert?

Tüll schrieb:
> lss Datei?

Im Projekt-Ordner der Unterordner "default".
Daraus die Datei "NameDeinesProjektes.lss".

von MarioT (Gast)


Lesenswert?

Tüll schrieb:
> OK, Kondensatoren. Einen möglichst grossen Elko? Oder verschiedene?

100nF
Elkos sind zu langsam.
Ohne Abblockkondensatoren kann das ganze so in Schwingung kommen das 
alles mögliche passieren kann, aber ganz selten das was soll.

von Neuling 10001 (Gast)


Lesenswert?

Könnte es daran liegen, das am Ende vom Quelltext keine neue Zeile 
eingefügt wurde ?

von Tüll (Gast)


Angehängte Dateien:

Lesenswert?

lss Datei angehängt.

Ich hab jetzt wieder meinen alten 7805 Regler aufgebaut samt zugehörigen 
Kondensatoren (100nF), die so früher immer funktioniert haben.
Keine Änderung.

von Tüll (Gast)


Lesenswert?

OMG

Problem gelöst. Infos kommen gleich.

von Tüll (Gast)


Lesenswert?

holger schrieb:
> Ja, man kompiliert das Programm für den falschen Prozessor und/oder
> wählt die falsche HEX Datei aus.

Hätte ich nicht für möglich gehalten weil ja die HEX Datei immer gewählt 
wird wenn man ein neues Projekt öffnet (so dachte ich). Aber irgendwie 
hab ich oder AVR Studio was verbockt und da stand die falsche HEX Datei 
aus einem anderen Projekt drin. Die hab ich immmer und immer wieder in 
den µC geschrieben - hat dann natürlich wenig Sinn wenn ich den 
Quellcode von meinem neuen Programm ändere...

Danke an alle!

Ich bin in den letzten 24 Stunden 1 Jahr gealtert aber es hat sich doch 
gelohnt hier zu fragen.

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.