Forum: Mikrocontroller und Digitale Elektronik wo steckt der Fehler (Mega8 will nicht recht)


von Jörg K. (joergonaut)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe meinen ersten µC aufgebaut und leider funktioniert er nicht so 
wie soll.
Die Schaltung habe ich so aufgebaut wie im Anhang zu sehen ist. 
Programmiert habe ich mit dem USB AVR LAB direkt aus Bascom. Das 
funktioniert soweit. Der Chip wird korrekt ausgelesen, die Fuse-Bits 
auch.
Das Hallo World Programm sieht wie folgt aus:
1
$regfile = "M8def.dat"                                      'es handelt sich um einen ATmega8
2
$crystal = 1000000                                          'der eingebauter RC-Oszillator läuft mit 1 Mhz
3
$hwstack = 100                                              'im Speicher werden für den Hardware-Stack 100 Byte reserviert
4
$swstack = 100                                              'im Speicher werden für den Software-Stack 100 Byte reserviert
5
$framesize = 100                                            'im Speicher werden für den Frame 100 Byte reserviert
6
7
Config Portb.1 = Output
8
Do
9
  Portb.1 = 1                                               'Pin wird auf High, also 5V geschaltet
10
  Waitms 500
11
  Portb.1 = 0                                               'Pin wird auf Low, also 0V geschaltet
12
  Waitms 500
13
Loop
14
15
End

Doch leider leuchtet die LED nicht. Am Pin B1 messe ich eine stabile 
Spannung 3.6V gegen GND, kein Wechsel zwischen 0V und 5V.

Kann mir jemand auf die Sprünge helfen, warum das nicht funktioniert?

Gruß Jörg

: Verschoben durch Admin
von Benedikt Patt (Gast)


Lesenswert?

Hallo,
also wenn ich alles richtig überschaut habe sieht das ganz gut aus.
Womit misst du die Spannung? Multimeter? Vielleicht ist eine halbe 
Sekunde schon zu schnell. Ich würde die LED mal ablöten (oder einen 
anderen Pin schalten) und den Wechsel-Takt etwas langsamer stellen, 
vielleicht mal 2 Sekunden. Dann müsstest du eigenlich was messen können.

Gruß
Benedikt

von GefährlichesHalbwissen (Gast)


Lesenswert?

Jörg K. schrieb:
> $regfile = "M8def.dat"                                      'es handelt sich um 
einen ATmega8

Miß mal direkt am Prozessor die Versorgungsspannung.

Ich habe einen ATmega88 und hatte in Assembler m8def.inc eingebunden und 
dann gings nicht. Nachdem ich m88def.inc eingebunden hatte gings.

von Christopher G. (cbg)


Lesenswert?

1.5k als LED Vorwiderstand? Ist das nicht ein bissl viel? Schaltung 
schaut sonst gut aus.

von Jörg K. (joergonaut)


Lesenswert?

Die Spannungen am Prozessor stimmen alle, VCC ist genau 5,05V.
Der Vorwiderstand ist schon recht hoch, hatte aber zum Testen auf dem 
Steckbrett den 1K5 gerade zur Hand und die LED hat geleuchtet. Soll ja 
nur ein "hallo Welt" Test sein.

von Max M. (xxl)


Lesenswert?

Sicher das die LED nicht verpolt oder defekt ist?
Kann man testen indem man den Widerstand vom Atmegapin
abmacht und kurz auf Masse legt. Dann müsste die LED leuchten.
Die 3,5 Volt kann ein Mittelwert sein weil die Frequenz
für das Multimeter wohl zu schnell ist.
Ein Oszilloskop wäre hilfreich, jedoch müsste es auch
ohne gehen wenn man weiß was man tut.

von R. F. (rfr)


Lesenswert?

Wenn du kein oszilloskop hast, erhöhe mal das Delay so, dass es etwa 2 
sec beträgt. Messe die Spannung an dem Portpin, an dem die Led 
angeschlossen ist, messe auch die Spannung an dem Punkt zwischen Diode 
und Widerstand.

Alle Messungen bitte etwa 5 - 6 sekunden.
#
Gruss

Robert

von Jörg K. (joergonaut)


Lesenswert?

Messungen mit Delay auf 2s:
PB1->GND: 3,6V, fest
PB1->VCC: 0,45V, fest

Die LED ist richtig eingebaut. Zum Test habe ich mit Batterien 5V an PB1 
und VCC angelegt. Die LED leuchtet. (plus an VCC, minus an PB1). Im 
Programm soll die LED ja leuchten, wenn der Pin 0V hat, also sitzt sie 
richtig herum.

von R. F. (rfr)


Lesenswert?

Wieviel Strom nimmt die LED?
Gruss

Robert

von Klaus (Gast)


Lesenswert?

> wo steckt der Fehler

Falsche Programmiersprache. Die versteht der Mega8 nicht.

von Jörg K. (joergonaut)


Lesenswert?

Klaus schrieb:
> Falsche Programmiersprache. Die versteht der Mega8 nicht.

Ist das ernst gemeint? Muss ich im Compiler was umstellen? Das "hello 
world" findet man doch genau so in vielen Tutorials.

von Tom (Gast)


Lesenswert?

Hallo Jörg,
Was Klaus meint, ist dass Du in Bascom programmierst. Die alte Leier von 
Bascom is Scheiße, meine Programmiersprache is besser und dieses ganze 
kindische Zeug. Vielleicht sollte Klaus sich einfach mal mit was 
Konstruktiven zu Wort melden, das hatte sicher mehr geholfen.

von Lars K. (lokeller)


Lesenswert?

Hab nur kurz drübergeguckt:
Fuses richtig gesetzt, Du nimmt 1MHz int. Takt an, ist der auch gesetzt?
Und dem /Reset-Pin auch'n kleinen C zur Masse spendieren ;-)

Viel Erfolg,
Lars

von Michael U. (amiga)


Lesenswert?

Hallo,

Jörg K. schrieb:
> Messungen mit Delay auf 2s:
> PB1->GND: 3,6V, fest
> PB1->VCC: 0,45V, fest
3,6V + 0,45V = 4,05V
Wo hast Du den Rest Deiner 5V???

> Die LED ist richtig eingebaut. Zum Test habe ich mit Batterien 5V an PB1
> und VCC angelegt. Die LED leuchtet. (plus an VCC, minus an PB1). Im
> Programm soll die LED ja leuchten, wenn der Pin 0V hat, also sitzt sie
> richtig herum.

Deine LED soll leuchten, wenn an PB1 5V anliegen. Also doch bestenfalls 
PB1 mit den 5V verbinden, ob die LED angeht, ohne den AVR dran!
Was soll der AVR von Deiner Batterie zwischen Portpin und Vcc halten und 
welchen Weg hat der Strom genommen, daß die LED da leuchten konnte??

Gruß aus Berlin
Michael

von GefährlichesHalbwissen (Gast)


Lesenswert?

Noch ein simpler Test:

Setze in deinem Programm den Pin doch einmal einfach nur hoch

Do
  Portb.1 = 1
Loop

Wenn sie dann nicht leuchtet, hats schon mal mit dem Blinkmechanismus 
nichts zu tun.

von Karl H. (kbuchegg)


Lesenswert?

GefährlichesHalbwissen schrieb:
> Noch ein simpler Test:
>
> Setze in deinem Programm den Pin doch einmal einfach nur hoch
>
> Do
>   Portb.1 = 1
> Loop
>
> Wenn sie dann nicht leuchtet, hats schon mal mit dem Blinkmechanismus
> nichts zu tun.

Auch den Gegentest machen

 Do
   Portb.1 = 0
 Loop


Das Verhalten des Pins muss sich drastisch vom ersten vorgeschlagenen 
Test unterscheiden :-)

von Jörg K. (joergonaut)


Angehängte Dateien:

Lesenswert?

Also erst einmal vielen Dank für Eure Hilfe.

Ich habe das Gefühl, das der Mega8 noch gar nicht richtig läuft. Egal 
was ich im Programm schreibe, das Resultat ist immer das gleiche.

Noch mal der Aufbau bzw. die Herangehensweise:
- Programmer USB AVR LAB v3.0 mit USBASP Firmware
- neuer 10nF Kondensator zwischen Reset und GND
- Programmieren bei stromloser Schaltung

Die LED sitzt über den 1K5 Widerstand mit der Kathode an PB1. Die Anode 
liegt an +5V. Sie sollte also leuchten, wenn PB1 auf 0 ist. Zum Testen 
der LED habe ich bei stromloser Schaltung 5V+ an die Anode (gleich VCC) 
und GND an den Widerstand (gleich PB1) gelegt. Sie funktioniert.

Im Programm habe ich verschiedene Pins dauerhaft auf 1 und/oder 0 
gesetzt. An allen messe ich 0V. Außer an PB1, da sind es 3.6V.
Kann es sein, das da noch gar kein Programm läuft und die Pins auch 
nicht als Output geschaltet sind? Dann kommen die 3.6V aus VCC minus 
Spannung Diode zusammen, nur das kein Strom fließt.

Die Fuse Bits habe ich mal als Bild angehangen. Ist da was verkehrt?
Ich möchte ja den internen Oszillator benutzen, da gibt es aber 3 
mögliche Einstellungen:
000001:Int. RC Osc 1 MHz
010001:Int. RC Osc 1 MHz
100001:Int. RC Osc 1 MHz
Dann steht da immer noch das er eine .EEP Datei nicht findet. Ist das 
wichtig?

Einen zweiten Mega8 habe ich auch schon getestet, das Ergebnis ist das 
gleiche.

Gruß Jörg

von Karl H. (kbuchegg)


Lesenswert?

Jörg K. schrieb:
> Also erst einmal vielen Dank für Eure Hilfe.
>
> Ich habe das Gefühl, das der Mega8 noch gar nicht richtig läuft.

Kannst du ihn korrekt programmieren und auch wieder auslesen?

(Zieh mal den ISP Stecker von der Mega8 Platine ab. Nicht das der 
Programmer den µC ständig im Reset hält)

von Jörg K. (joergonaut)


Angehängte Dateien:

Lesenswert?

Das Programmieren scheint zu funktionieren, die Fuse Bits und die 
Kennung wird auch korrekt ausgelesen.

Den ISP Stecker ziehe ich immer ab.

von Max M. (xxl)


Lesenswert?

Warum schließt du nichte einen Quarz an um zu sehen ob das Problem
jetzt eine Hardware-oder Softwarenatur hat, wie die meisten Anwender
das auch machen? Vielleicht läuft ja bloß der interne Generator nicht.

von Jörg K. (joergonaut)


Lesenswert?

Ich habe keinen Quarz hier. Ich wollte eigentlich ohne auskommen. Zur 
Fehlersuche werde ich mir noch einen besorgen.

von Max M. (xxl)


Lesenswert?

Vergiss nicht zwei keramische Kondensatoren ca.22pF(?)
damit der auch anschwingt.

von A.Drei (allu) (Gast)


Lesenswert?

Wenn sich der ATMega8 programmieren lässt, läuft der interne 
Takgenerator. Schaltbild und SW sieht für mich korrekt aus, sollte 
eigentlich funktionieren. Deshalb die dumme Frage: Ist die LED wirlich 
an PB1 = Pin 15 angeschlossen ?
Vielleicht mal versuchshalber mit allen B-Port-Beinchen wackeln:

Config Portb = Output
Do
  toggle Portb
  Waitms 500
Loop

von A.Drei (allu) (Gast)


Lesenswert?

Reset-Pin schon überprüft ? Sind da +5Volt?

von [Frank] (Gast)


Lesenswert?

@Jörg,

so wie das bei fuse.jpg aussieht, ist der Watchdog per Fuse gesetzt, 
also wird die CPU zyklisch resettet.

von Jörg K. (joergonaut)


Lesenswert?

>Wenn sich der ATMega8 programmieren lässt, läuft der interne
>Takgenerator. Schaltbild und SW sieht für mich korrekt aus, sollte
>eigentlich funktionieren. Deshalb die dumme Frage: Ist die LED wirlich
>an PB1 = Pin 15 angeschlossen ?
>Vielleicht mal versuchshalber mit allen B-Port-Beinchen wackeln:
>
>Config Portb = Output
>Do
>  toggle Portb
>  Waitms 500
>Loop

Die LED hängt sicher an PB1, mit externer Spannung habe ich das ja auch 
schon getestet. Egal wie ich die Ports schalte, ich bekomme immer das 
gleich Ergebnis: alle normalen Pins 0V, PB1 3.6V.

>Reset-Pin schon überprüft ? Sind da +5Volt?

Am Reset Pin liegen +5V an.

>so wie das bei fuse.jpg aussieht, ist der Watchdog per Fuse gesetzt,
>also wird die CPU zyklisch resettet.

Ich nehme an Du meinst Fusebis High J. Die andere Option ist 0:WDT 
always on.

von Harry S. (littlegonzo)


Lesenswert?

Mal ne einfache Frage, hast Du es mal an einem anderen Portpin probiert?
Evtl. ist einfach der Pin defekt hatte ich auch schonmal und hätte fast 
in die Tischkante gebissen weil ich nicht drauf gekommen bin und ewig 
den fehler im Programm gesucht habe^^
Wenn ich dem Text hier folge hatte ich irgendwo gelesen Du hast extern 5 
V an den Pin gelegt. Ich hoffe doch das hast Du gemacht als der AVR 
draussen war sonst ist er wahrscheinlich defekt. Manchmal eben nur der 
eine Portpin...

Gruß Littlegonzo

von Jörg K. (joergonaut)


Lesenswert?

Ich habe das Problem jetzt gelöst. Vielen Dank nochmal an dieser Stelle 
an alle die sich hier eingebracht haben.

Es lag an Bascom. Ich habe festgestellt, das es beim verify des Buffers 
Fehler gibt, d.h. Bascom schreibt irgendwas rein, nur nicht den 
korrekten Buffer.

Nach langem Probieren habe ich dann das hex File von Bascom mit AVRDude 
unter zur Zuhilfenahme von AVR8 Burn-O-Mat in den Mega geschrieben. Das 
verify war ok, das Programm lief und die LED blinkte. Juhu!

Keine Ahnung warum es mit Bascom nicht geht!

Jetzt werde ich noch AVRDude als Programmer in Bascom einbinden und dann 
bin ich zufrieden.

Gruß Jörg

von Rainer U. (r-u)


Lesenswert?

Vielleicht hast Du im BasCom nur vergessen einzustellen, daß er immer 
den aktuellen Editorfile flashen soll? :-)

von Dennis (Gast)


Lesenswert?

Hallo,

ganau das hatte ich auch... benutzt du usbasp und bascom version 
1.11.9.8???
mfg

von Jörg K. (joergonaut)


Lesenswert?

Hallo,

ja, ich nutze die gleiche Version von Bascom.
Der Programmer ist ein USB AVR Lab mit Usbasp Firmware.
Ich habe jetzt avr dude als Programmer in Bascom eingebunden. Wenn ich 
darüber programmiere funktioniert es bestens. Trage ich Usbasp direkt 
als Programmer ein so läuft was schief.
Keine Ahnung warum der Umweg über avr dude funktioniert bzw. warum es 
mit bascom direkt nicht geht.

Gruß
Jörg

von Jörg K. (joergonaut)


Lesenswert?

@Dennis
Welchen Programmer nutzt Du?

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.