Hallo zusammen und herzlichen Gruß aus Rhede.
Ich hatte in den Vergangenen Tagen das Glück, das mir jemand seine
Arbeit mit dem ATmega8 zeigte. Ich fand dies sehr interessant und habe
mir überlegt, mich auch mit der Thematik zu beschäftigen.
Alle (hoffentlich) notwendigen Teile habe ich mir besorgt.
Dies wären:
1 x Pollin Board V2.01
2 x ATmega8
2 x ATmega16
-----------------------------------
Der Proz. war relativ leicht aufgesattelt.
Die serielle Verbindung auch hergestellt und die ersten Progs
"abgeschrieben", assembliert und mittels avrdude eingefräst.
Soweit so gut und alles lief mehr oder weniger ohne Fehlermeldungen
durch. Die Meldungen die kamen, konnte ich selber auf Seite schaffen.
nach langem hin und her, Testen, Lesen, "versuchen" zu verstehen ...
etc. habe ich eine (scheinbar) unüberwindliche Hürde.
Es sieht für mich so aus, als wolle der ATmega8 nicht anfangen wollen zu
arbeiten.
Hier mal ein quelltext des Assembler-Progs:
1
/*
2
* ledblink.asm
3
*
4
* Created: 13.12.2011 16:07:45
5
* Author: R.Blicker
6
*/
7
.include "m8def.inc"
8
.org 0
9
ldi r16,0xFF ; Hier soll der Wert 255 in das Reg r16 geladen werden
10
out DDRB,r16 ; PORTB wird zum Ausgang gemacht
11
out PORTB,r16 ; Schreibe r16 auf PORTB
12
ldi r16,0x00 ; Lade den Wert 000 in das Reg r16
13
out DDRB,r16 ; Setze wiederum PORTB als Ausgang
14
out PORTB,r16 ; Schreibe r16 auf PORTB
Das vom Compiler erzeugte Hexfile sieht so aus:
1
:020000020000FC
2
3
:040000000FEF08BB3B
4
5
:00000001FF
Mittels avrdude habe ich das Hexfile eingeladen:
Ausgabe von avrdude:
Ich hätte mindestens erwartet, das die LED aufgrund der 1Mhz
Taktfrequenz augenscheinlich an bleibt. Aber selbst das ist nicht der
Fall.
Bin ich zu doof, habe ich an den falschen Stellen gesucht, Passt soweit
alles oder nichts? Ich habe mittlerweile keine Ideen mehr.
Vielleicht sieht ja einer von den Profis etwas.
Danke für die bereitschaft der Unterstützung.
Ralf Blicker schrieb:> avrdude: writing flash (4 bytes):
Nur 4 Bytes? Dein übersetztes Programm sollte grösser sein. Ich vermute,
da ist was beim Assemblieren schief gelaufen.
Lösch mal die hex und übersetze dein Programm nochmals.
.. warum an bleibt ?
Nachdem Du sie einschaltest, schaltest Du sie (die LED) auch gleich
wieder aus.
Mach da mal ein Delay von ein paar Millisekunden (100-500) rein, dann
wird die LED auch blinken
Gruss Ingo
Lies sich ins AVR-Tutorial ein. Es gibt auch Artikel zu Pollin
Boards in der Artikelsammlung.
Hast du mal den Schaltplan deines Pollin Boards betrachtet, ob die LEDs
auch an PORTB angeschlossen sind und die Jumper auf dem Board
entsprechen gesetzt sind? Ich meine, wenn das nicht der Fall ist, kann
dein Programm die LEDs einfach nicht zum Leuchten bringen!
Dein Programm läuft bei 1 MHz Taktfrequenz des AVR geschätzt ca. 6-10
Millionstel Sekunden. Die Einschaltzeit der LED beträgt ca. 2
Millionstel Sekunden (angenommen EIN ist HIGH auf PORTB und AUS ist LOW
auf PORTB, d.h. active-high geschaltete LED). Das menschliche Auge ist
nicht leistungsfähig genug, um das zu sehen, schätze ich.
Dein Programm sollte am Ende nicht so einfach ins Nirvana abtauchen. Ein
ordentliches µC Programm arbeitet in einer Endlosschleife.
Das Led wird für einige Takte angehen und dann wider aus, je nach dem,
wie du die LED angeschlossen hast. Das Programm wird ja nicht
automatisch wiederholt. Könnte es daran liegen?
lg
Krapao schrieb:> Lies sich ins AVR-Tutorial ein. Es gibt auch Artikel zu Pollin> Boards in der Artikelsammlung.>> Hast du mal den Schaltplan deines Pollin Boards betrachtet, ob die LEDs> auch an PORTB angeschlossen sind und die Jumper auf dem Board> entsprechen gesetzt sind? Ich meine, wenn das nicht der Fall ist, kann> dein Programm die LEDs einfach nicht zum Leuchten bringen!>> Dein Programm läuft bei 1 MHz Taktfrequenz des AVR geschätzt ca. 6-10> Millionstel Sekunden. Die Einschaltzeit der LED beträgt ca. 2> Millionstel Sekunden (angenommen EIN ist HIGH auf PORTB und AUS ist LOW> auf PORTB, d.h. active-high geschaltete LED). Das menschliche Auge ist> nicht leistungsfähig genug, um das zu sehen, schätze ich.>> Dein Programm sollte am Ende nicht so einfach ins Nirvana abtauchen. Ein> ordentliches µC Programm arbeitet in einer Endlosschleife.
Hallo Krapao,
DANKE, das war's.
Hier mal meine korrigierte Variante:
1
* AVRAssembler1.asm
2
*
3
* Created: 13.12.2011 22:41:53
4
* Author: R.Blicker
5
*/
6
.include "m8def.inc"
7
.org 0
8
9
LOOP:
10
ldi r16,0xFF ; Hier soll der Wert 255 in das Reg r16 geladen werden
> ldi r16,0xFF ; Hier soll der Wert 255 in das Reg r16 geladen werden
10
> out DDRB,r16 ; PORTB wird zum Ausgang gemacht
11
> out PORTB,r16 ; Schreibe r16 auf PORTB
12
> ldi r16,0x00 ; Lade den Wert 000 in das Reg r16
13
> out DDRB,r16 ; Setze wiederum PORTB als Ausgang
14
15
> out PORTB,r16 ; Schreibe r16 auf PORTB
16
>
Die Kommentare stimmen nicht.
> ldi r16,0x00 ; Lade den Wert 000 in das Reg r16> out DDRB,r16 ; Setze wiederum PORTB als Ausgang
setzt die Portrichtung wieder auf Eingang!
Warum machst du das? Die Portrichtung sollte einmal VOR der Schleife auf
Ausgang gesetzt werden, danach wird der Port nur noch ein und
ausgeschaltet, die Richtung aber nicht mehr verändert.
gruß cyblord
Hi
Schau dir wirklich mal die Tutorials an. Ich hab auch mit dem Board
angefangen und durch studieren der Tutorials eigentlich (fast) alles
gelernt, was gebraucht wird. Da ich das Problem, "was macht der
Controller eigentlich" kenne, habe ich hier ein kleines Progtrramm
veröffentlicht, welches dir zur Laufzeit über die serielle Schnittstelle
die Variableninhalte in den PC schreibt. So kannst du sehen, ob die von
dir vorgesehenen Schritte bearbeitet und die Werte in den VAriablen wie
erwartet sind. Such mal nach OpenEye. Weitere Hilfe findest du auch im
Forum von AVR-Praxis.
Ach ja, das Board wird richtig gut, wenn du dir einen USB-ISP-Stick
zulegst. Dann ist der Umweg über PonyProg oder ähnliche Programme
Geschichte und du kannst direkt aus AVR-Studio mit einer ordentlichen
Geschwindigkeit deine Programme übertragen.
Gruß oldmax