Hallo, ich versuche gerade ein Moodlight mit einem Attiny25 zu Basteln. Als Quellcode wollt ich erstmal diesen hier versuchen: Beitrag "RGB-Lampe mit TINY13 in Assembler" Wenn ich die Datei aber mit avra compeliere erhalte ich folgende Fehlermeldung: Pass 1... Pass 2... test2.asm(20) : error : Found no label/variable/constant named SPH test2.asm(30) : error : Found no label/variable/constant named TCCR0 done Assembly aborted with 2 errors and 0 warnings. Was stimmt da nicht? Die tn25def.inc hab ich von hier http://avr.8b.cz/inc/
Die register heißen halt im Tiny25 schon wieder anders als im Tiny 13. ich vermute das wird dein Problem sein...
ok ich hab jetzt mal TCCR0 laut Datenblatt durch TCCR0B ersetzt und in der tn25def.inc eine zeile: .equ SPH = 0x3e ergänzt. Aber leider ohne erfolg, die LED leuchtet zwar wird aber nicht gedimmt hat jemand noch einen Tip ?
mitsh wrote:
> ok ich hab jetzt mal TCCR0 laut Datenblatt durch TCCR0B ersetzt
Beim tiny25 gibt es TCCR0A und TCCR0B. Du musst also schauen welche Bits
aus dem TCCR0 Register im A und welche im B Register gesetzt werden
müssen.
Davon mal abgesehen: Was für eine Software verwendest du?
Die aus dem Link von dir bestimmt nicht, denn der tiny13 hat kein TCCR0,
und in der obigen Software kommt daher auch nur TCCR0B vor.
> und in der tn25def.inc ...
Keine gute Idee... ;-)
Wenn Du das Programm portieren willst, dann ändere das Programm und
nicht die Definition. Die Definitionen stellen eine Art Standard dar, an
den sich die Programmierer zu halten haben.
Um (tatsächliche) Ungereimtheiten (falls es denn welche gibt) in der
Definitionsdatei erkennen und korrigieren zu können, muss man die
Architektur des Controllers schon verdammt gut kennen.
...
Die Definition abzuändern halte ich auch für keine gute Idee. PWM mit tiny 2/4/85 auf Timer 0 sollte eigentlich nicht sonderlich kompliziert sein. Es sollte genügen einen Output für fast PWM freizuschalten und den Takt mit geeignetem Vorteiler zu aktivieren, bsp. TCCR0A = 0x83 um fast PWM auf OC0A zu setzen, dann z.B. TCCR0B = 0x03 für Timer Takt auf 1/64 des I/O Taktes. Jetzt lässt sich der PWM mit OCR0A kontrollieren.
hi danke erstmal für eure Tips Ich verwende im Moment eine kombination aus Wolfram Herzog's Datei und dem was ich im Tutorial gelesen habe:
1 | ; TINY13RGB |
2 | ; Software PWM zum Ansteuern von RGB Led als Farbenspiel |
3 | ; Version 1.2 30-11-2007 Wolfram Herzog www.wherzog.de |
4 | ; Für TINY13 im Franzis-Board |
5 | ; Taktfrequenz Default |
6 | ; |
7 | ; (abgeändert auf attiny25) |
8 | |
9 | .include "tn25def.inc" |
10 | |
11 | .def temp = r16 ; Temporäres Arbeitsregister |
12 | .def PWMCount = r17 ; PWM Pulsbreitenzähler |
13 | |
14 | .def led_1 = r18 ; Helligkeitswert Led1: 0 .. 127 |
15 | .def led_2 = r19 ; Helligkeitswert Led4: 0 .. 127 |
16 | .def led_3 = r20 ; Helligkeitswert Led5: 0 .. 127 |
17 | |
18 | .equ HELL = 0 ; Null = maximale Helligkeit |
19 | |
20 | .org 0x0000 |
21 | rjmp main ; Reset Handler |
22 | |
23 | .org OVF0addr |
24 | rjmp timer0_overflow ; Timer Overflow Handler |
25 | |
26 | main: |
27 | ldi temp, LOW(RAMEND) ; Stackpointer initialisieren |
28 | out SPL, temp |
29 | ldi temp, HIGH(RAMEND) |
30 | out SPH, temp |
31 | ; Initialisierung |
32 | ldi temp, 0xFF ; Port B auf Ausgang |
33 | out DDRB, temp |
34 | |
35 | ldi temp, 0b00000001 ; CS00 setzen: Teiler 1 |
36 | out TCCR0A, temp |
37 | |
38 | ldi temp, 0b00000010 ; TOIE0: Interrupt bei Timer Overflow |
39 | out TIMSK, temp |
40 | |
41 | ldi led_1, HELL ; Alle Lampen an |
42 | ldi led_2, HELL ; |
43 | ldi led_3, HELL |
44 | |
45 | sei ; Interrupt freigeben |
46 | |
47 | loop: rjmp loop |
48 | |
49 | timer0_overflow: ; Timer 0 Overflow Handler |
50 | inc PWMCount ; den PWM Zähler von 0 bis |
51 | cpi PWMCount, 128 ; 127 zählen lassen |
52 | brne WorkPWM |
53 | clr PWMCount |
54 | |
55 | WorkPWM: |
56 | ldi temp, 0b11000000 ; 0 .. Led an, 1 .. Led aus |
57 | |
58 | cp PWMCount, led_1 ; Ist der Grenzwert für Led 1 erreicht |
59 | brlo OneOn |
60 | ori temp, $01 |
61 | |
62 | OneOn: cp PWMCount, led_2 ; Ist der Grenzwert für Led 2 erreicht |
63 | brlo TwoOn |
64 | ori temp, $02 |
65 | |
66 | TwoOn: cp PWMCount, led_3 ; Ist der Grenzwert für Led 3 erreicht |
67 | brlo SetBits |
68 | ori temp, $04 |
69 | |
70 | SetBits: ; Die neue Bitbelegung am Port ausgeben |
71 | out PORTB, temp |
72 | |
73 | reti |
Die LED's leuchten zwar, ich kann aber nicht feststellen ob sie tatsächlich getaktet wird. Wie kann ich den Takt (vorteiler?) einstellen um erstmal ein "blinken" zu erreichen ?
mitsh wrote: > tatsächlich getaktet wird. Wie kann ich den Takt (vorteiler?) einstellen > um erstmal ein "blinken" zu erreichen ? Wenn du dein eigens Programm mal durchgelesen hättest, wären dir vielleicht diese Zeilen ins Auge gestochen ldi temp, 0b00000001 ; CS00 setzen: Teiler 1 out TCCR0A, temp Was denkst du: Von welchem Teiler ist hier wohl die Rede? -> Ab ins Datenblatt und mal die Beschreibung zum Tiny25 und dort speziell zum Timer0 und dort wieder speziell zum TCCR0A Register lesen. Es hilft nichts: WEnn man ein Programm von einem Prozessor auf einen anderen portieren will, muss man Datenblätter lesen bzw. vergleichen. Ob dir das nun gefällt oder nicht.
Hallo mitsh, da hatte ich PWM falsch verstanden, ich dachte es wird die PWM Funktion des AVR verwendet und nicht "nur" der Timer. Zum Handling des Interrupts kann ich keine belastbare Aussage machen, ich habe derzeit keinen 25er da. Aber auf jeden Fall muss dem Timer der Takt eingeschaltet werden, per TCCR0B, sonst läuft da nix. doc2586.pdf Seite 83. Verwende vielleicht mal / 1024, dann solltest Du sehen können, was passiert. Also nach out TCCR0A, temp noch ldi temp, 0b00000101; out TCCR0B, temp. Schöne Grüße
> Was denkst du: Von welchem Teiler ist hier wohl die Rede?
Das hab ich mir fast gedacht! aber leider ohne Erfolg :-(, so langsam
komm ich zur Überzeugung das vieleicht das ein oder andere Bauteil in
meiner Schaltung defekt ist. Das werd ich nächste Woche mal überprüfen.
Danke für eure Hilfe.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.