Forum: Mikrocontroller und Digitale Elektronik Mega88 & ASM & PWM (Hilfe gesucht)


von AVP (Gast)


Lesenswert?

Gibt es irgendwo eine Erläuterung, wie man den Modus 5 (8 Bit Fast PWM - 
Der Timer zählt bis 255) in ASM für den Mega88 initialisiert? Ich finde 
hier nur die Beispiele für den 8515 und auch da nicht den Modus, sondern 
immer nur die 16-Bit Variante. Außerdem  bringen die immer Fehler: 
"Operand 1 out of Range", obwohl ich nur mit copy & paste den Quellcode 
übernehme.
Das Datenblatt hab ich auch schon durch, ich werde daraus aber leider 
auch nicht schlauer.
Beispiel:
1
.include "m88def.inc"
2
 
3
.def  temp = r16
4
.def  pwm = r17
5
6
.cseg
7
.org  $000
8
  rjmp  reset      ;reset handle
9
10
reset: 
11
 rjmp  init      ;start init
12
13
init:  
14
  ldi  temp, low(ramend)
15
  out  spl, temp    ;set spl
16
  ldi  temp, high(ramend)
17
  out  sph, temp    ;set sph
18
19
  ldi  temp,0b11111111    ;portb = output
20
  out  ddrd,temp
21
22
  out  portb,temp    ;switch led's off
23
24
  ldi  temp,0b10000001    ;init PWM... (choose 8-Bit PWM etc...)A1
25
  out  tccr1a,temp ; FEHLER
26
27
  ldi  temp,0
28
  out  ocr1ah,temp ; FEHLER
29
30
  ldi  temp,1
31
  out  ocr1al,temp ; FEHLER
32
33
  ldi  temp,0b00000001
34
  out  tccr1b,temp ; FEHLER
35
36
  sei        ;enable interrupts
37
38
  rjmp  loop
39
40
loop:  
41
ldi  pwm,230      ;choose the value for pwm
42
  out  ocr1al,pwm ; FEHLER
43
  rjmp  loop
Danke schonmal für die Hilfe

von Christoph S. (mixer) Benutzerseite


Lesenswert?

1
 
2
  ldi  temp,0b11111111    ;portb = output
3
  out  ddrd,temp
4
5
  out  portb,temp    ;switch led's off

Das passt schon mal nicht. Wenn du den PortB als Ausgang konfigurieren 
willst solltest du das auch in s DDRB schreiben, nichts in s DDRD!


Wie man den Timer auf die gewünschte PWM-Modi initialisiert ist im 
Datenblatt beschrieben!
1
  rjmp  loop
2
3
loop:  
4
ldi  pwm,230      ;choose the value for pwm
5
  out  ocr1al,pwm ; FEHLER
6
  rjmp  loop

ich kenne den Mega88 nicht, nur den Mega8 aber bei dem reicht es wenn 
man den Commpare-Wert einmal in s Register schreibt und nicht immer 
wieder!!

MFG Mixer

von AVP (Gast)


Lesenswert?

>Wie man den Timer auf die gewünschte PWM-Modi initialisiert ist im
>Datenblatt beschrieben!

Und genau da steig ich grad nicht durch, deshalb frag ich ja. Und die 
Beispiele, die ich gefunden habe, die funktionieren (sollen), sind in C, 
das hilft mir auch nicht weiter.

von senex24 (Gast)


Lesenswert?

TCCR1x und OCR1x sind im ATmega88 'memory-mapped I/O', müssen also per 
sts  angesprochen werden.

von senex24 (Gast)


Lesenswert?

Ich sehe gerade, dass Atmel den Bereich 0x0060..0x00FF als 'extended 
I/O' bezeichnet; der Effekt ist der gleiche: sts statt out, bzw. lds 
statt in.

von AVP (Gast)


Lesenswert?

Danke Senex24, genau so stelle ich mir Hilfe vor. Ich brauchte nur den 
Hinweis, was ich falsch gemacht habe. O Fehler beim compilieren und auch 
meine Testplatine leuchtet. Danke.

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.