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
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
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.
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.
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.
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
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.
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.
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.
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
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
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.
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 :-)
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
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)
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.
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
>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.
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
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
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