wo steckt der Fehler (Mega8 will nicht recht)

OP #1559991
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
Angehängte Dateien:
Gast #1560033
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
Gast #1560041
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.
#1560140
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.
#1560149
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
Gast #1560349
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.
#1560357
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
Gast #1560369
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.
#1560412
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 :-)
OP #1561105
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
Angehängte Dateien:
#1561108
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)
Gast #1561290
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
OP #1561815
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.
#1561877
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
OP #1563383
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
OP #1574955
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren