Problem beim AVR-Tutorial: PWM

OP (Firma: FHTW - Berlin) #803736
Lesenswert?

Hi,

ich bin gerade bei dem Tutorial hier angelangt

http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM

und irgendwie klappt das nicht wie es soll. Ich wollte gerne den unteren 
Code auf meinen STK500 raufspielen und testen. Aber wenn ich das 
Programm überspiele leuchten einfach alle LEDs über PORTB. Muss ich noch 
was beachten vorher?


lg
OP (Firma: FHTW - Berlin) #803756
Lesenswert?

Ich benutze die LEDs auf dem STK500, weiß nicht genau was das für welche 
sind. Aber ich glaube eher das das Problem nicht bei den LEDs liegt 
sondern beim Timer. Weil hab den Code so verändert das eigentlich nur 6 
der 8 LEDs leuchten dürften. Und zwar habe ich die Zeile modifiziert
1
WorkPWM:
2
        ldi     temp, 0b11000000      ; 0 .. Led an, 1 .. Led aus

zu
1
WorkPWM:
2
        ldi     temp, 0b00000000      ; 0 .. Led an, 1 .. Led aus

Aber es war keine Veränderung zu sehen. Muss man den Timer irgendwie 
noch Aktivieren oder so? Also außer im Code.

Achso, ich benutze einen Mega8 µC
#803784
Lesenswert?

Der Grund für diese seltsame Initialisierung ist, dass der Mega8
am PortB nur 6 herausgeführte Leitungen hat (wenn ein Quarz
drann ist). Der Zustand von PB6 und PB7 sollte aber keinen
Einfluss auf die restlichen Pins haben.

> Muss man den Timer irgendwie
> noch Aktivieren oder so? Also außer im Code.

Nein, eigentlich nicht.
Wenn du das Programm fehlerfrei in den Prozessor übertragen
kannst, die LED mit dem richtigen Port verbunden sind und
der Prozessor grundsätzlich läuft, dann müsste das eigentlich
funktionieren.
OP (Firma: FHTW - Berlin) #803895
Lesenswert?

Im Simulator macht das Beispielprogramm genau das was es soll.

Zum übertragen bin ich auf Tools->Programm AVR->Conntect gegangen

Hab mich verbunden, bin dann auf den Reiter Program gangen, hab bei 
Flash die hex-datei ausgewählt und auf Program geklickt.

Bei nem einfachen Programm wo ich einfach mal bestimmte LEDs so 
eingeschaltet habe ging das auch wie gewollt. Nur halt bei dem Beispiel 
sind alle LEDs an.
Persönliche Seite #804050
Lesenswert?

Alle LEDs an (0 bis 5 im Original vor deiner Änderung) ist ja richtig. 
Wie gesagt, sollte es Unterschiede in der Helligkeit geben.

Das eigentliche Flackern/Blinken mit hundertundeinpaarzerquetschten 
Herzen sieht man wegen der Trägheit des Auges nicht.

Du könntest aber hingehen und das Flackern provozieren, indem du den 
Prescaler hochsetzt, d.h. die Timer Overflows langsamer ausgelöst 
werden. Also statt

        ldi     temp, 0b00000001      ; CS00 setzen: Teiler 1

eine anderen grösseren Prescaler z.B. 256 und dann neben dem Spielfilm 
laufen lassen und ab und zu draufschielen, ob sich die LED ändern.

        ldi     temp, 0b00000100      ; CS02 setzen: Teiler 256

Bei deinen Versuchen mit bestimmten LED - war das auch an PORTB und 
hattest du auch mal was erfolgreich mit genau dem Atmega8 Exemplar und 4 
Mhz gemacht (um die Fuses Einstellung abzuklopfen).
OP (Firma: FHTW - Berlin) #806828
Lesenswert?

Sorry für meine späte Antwort.

Also ich hab deine Änderung ausprobiert und mal mit dem Auge drauf 
geschielt, aber ich konnte da nichts sehen. Ich hab das Tutorial so 
verstanden das eigentlich die ersten 6 LEDs eine unterschiedliche 
"Helligkeit" haben müssten.

Gibt es bestimmte Einstellungen die ich vornehmen muss bei den Fuses?

Vielleicht mach ich beim bespielen was falsch:

Also ich kompiliere die Anwendung und suche die .hex datei und lade sie 
in den Flash. Muss ich was anderes machen?
OP (Firma: FHTW - Berlin) #807076
Lesenswert?

Ich hab gestern nochmal getestet und ich kann zu 100% sagen das der 
Timer nicht geht. Ich weiß nicht wieso, weil im Simulator geht das ja 
alles. Ich hab sogar mal die Definition auf 8515 gesetzt, aber nichts.

Wie kann der Timer denn deaktiviert sein?

Ich hab an dem Testboard keine Änderungen vorgenommen, nur den PortB mit 
den LEDS und den PortD mit den Schaltern verbunden
OP (Firma: FHTW - Berlin) #811769
Lesenswert?

Ich habe jetzt die .hex datei raufgespielt und dann gelesen. In  der 
Zip-Datei im Anhang zu diesen Post befindet sich die ledon.hex, welche 
von avr studio direkt kommt und die ledon_read.hex, welche ausgelesen 
ist.

Wie kann ich die jetzt deassemblieren?
Angehängte Dateien:
OP (Firma: FHTW - Berlin) #812055
Lesenswert?

Ich habe beide deassmebliert und der einzige Unterschied den ich den 
finde ist im Header:

Ich habe ReAVR benutzt.


Orginal:
1
; reassembly of "LEDON.hex"
2
; created by ReAVR V3.2.0
3
; at 2008/03/14 - 17:08:55
4
; for Atmel AVR assembler
5
;---------------------------------------
6
; AVR_TYPE=<unknown>
7
; FLASH_SIZE=8KB
8
; SRAM_START=0x60
9
;---------------------------------------
10
  .cseg
11
  .org  0x0000
12
;---------------------------------------
13
; byte constants:
14
;
15
.equ  k00  = 0x00  ;
16
.equ  k01  = 0x01  ;
17
.equ  k02  = 0x02  ;
18
.equ  k04  = 0x04  ;
19
.equ  k08  = 0x08  ;
20
.equ  k0A  = 0x0A  ;
21
.equ  k10  = 0x10  ;
22
.equ  k14  = 0x14  ;
23
.equ  k20  = 0x20  ; ' '
24
.equ  k50  = 0x50  ; 'P'
25
.equ  k5F  = 0x5F  ; '_'
26
.equ  k7F  = 0x7F  ; ''
27
.equ  k80  = 0x80  ;
28
.equ  kC0  = 0xC0  ; 'À'
29
.equ  kFF  = 0xFF  ; 'ÿ'
30
;
31
; io register addresses:
32
;
33
.equ  p17  = 0x17
34
.equ  p18  = 0x18
35
.equ  p33  = 0x33
36
.equ  p39  = 0x39
37
.equ  p3D  = 0x3D
38
.equ  p3E  = 0x3E
39
;
40
; bit numbers:
41
;
42
.equ  b0  = 0x00
43
.equ  b1  = 0x01
44
.equ  b2  = 0x02
45
.equ  b3  = 0x03
46
.equ  b4  = 0x04
47
.equ  b5  = 0x05
48
.equ  b6  = 0x06
49
.equ  b7  = 0x07
1
; reassembly of "LEDON_read.hex"
2
; created by ReAVR V3.2.0
3
; at 2008/03/14 - 17:09:07
4
; for ICCAVR assembler
5
;---------------------------------------
6
; AVR_TYPE=<unknown>
7
; FLASH_SIZE=8KB
8
; SRAM_START=0x60
9
;---------------------------------------
10
  .area  text
11
;; older iccavr need different setup:
12
;;  .area  text (abs,ovr)
13
;;  .org  0x0000
14
;---------------------------------------
15
; byte constants:
16
;
17
k00  = 0x00  ;
18
k01  = 0x01  ;
19
k02  = 0x02  ;
20
k04  = 0x04  ;
21
k08  = 0x08  ;
22
k0A  = 0x0A  ;
23
k10  = 0x10  ;
24
k14  = 0x14  ;
25
k20  = 0x20  ; ' '
26
k50  = 0x50  ; 'P'
27
k5F  = 0x5F  ; '_'
28
k7F  = 0x7F  ; ''
29
k80  = 0x80  ;
30
kC0  = 0xC0  ; 'À'
31
kFF  = 0xFF  ; 'ÿ'
32
;
33
; io register addresses:
34
;
35
p17  = 0x17
36
p18  = 0x18
37
p33  = 0x33
38
p39  = 0x39
39
p3D  = 0x3D
40
p3E  = 0x3E
41
;
42
; bit numbers:
43
;
44
b0  = 0x00
45
b1  = 0x01
46
b2  = 0x02
47
b3  = 0x03
48
b4  = 0x04
49
b5  = 0x05
50
b6  = 0x06
51
b7  = 0x07
Persönliche Seite #812444
Lesenswert?

Der zu flashende und der ausgelesene Code sind beide nicht für einen 
Atmega8 geschrieben. Der Timer0 Overflow Vektor sollte beim Atmega8 der 
Vektor 9 sein, tatsächlich ist es aber der Vektor 7. Dadurch kann die 
Interruptroutine nicht aufgerufen werden, selbst wenn sie korrekt 
initialisiert wäre.

Der Fehler kann (wird) davon kommen, dass im Assembler (AVR Studio) der 
falsche Mikrocontroller eingestellt ist und/oder das falsche Includefile 
verwendet wird, d.h. ein Fehler in der Source vorhanden ist. Vektor 7 
haben u.a. die At...8515.

Bitte kontrolliere die Einstellungen in AVR Studio, deinen Quellcode und 
ggf. das Includefile selbst (letzteres ist eine eher unwahrscheinliche 
Fehlerquelle bei einem so altgedienten µC wie dem Atmega8).
OP (Firma: FHTW - Berlin) #812911
Lesenswert?

Die Sache ist ja das ich Annehme einen atmega8515 zuhaben. Zumindest 
steht das auf dem µC und laut AVR Studio erkennt er ihn auch als 
solches:

http://img155.imageshack.us/my.php?image=03152008164603on0.jpg

Hier noch das Foto vom Board, da kann man gut Erkennen was drauf steht.

http://www.plucked.de/IMG_0720.jpg

Deshalb hab ich das Programm auch mit folgender Include-Zeile 
kompiliert:
1
.include "m8515def.inc"

Diese sagt auch das der Timer0 Overflow bei dem Vektor 7 liegt
1
.
2
.
3
.
4
.equ  OVF0addr  = 0x0007  ; Timer/Counter0 Overflow
5
.
6
.
7
.
Persönliche Seite #812966
Lesenswert?

Rainer H. wrote:
> Die Sache ist ja das ich Annehme einen atmega8515 zuhaben. Zumindest
> steht das auf dem µC und laut AVR Studio erkennt er ihn auch als
> solches:

Tja, dann habe ich vergeblich Zeit reingesteckt, weil ich die ganze Zeit 
von diesem Posting ausgegangen bin:

> Autor: Rainer H. (Firma FHTW - Berlin) (plucked)
> Datum: 06.03.2008 15:43
> ...
> Achso, ich benutze einen Mega8 µC

Und kein Aufschrei gekommen ist, als ich dich bat

> Autor: Stefan "stefb" B. (stefan) Benutzerseite
> Datum: 11.03.2008 11:26
>
> Lies mal aus, was an Programm im Atmega8 drin ist und hänge das
> HEX-File hier an.

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