3 x PWM in Bascom Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
3 x PWM in Bascom Suche nach: pwm (3619) |
|
|
|
|
BID = 380241
stefan_z Gelegenheitsposter
Beiträge: 57 Wohnort: Köln
|
|
Also ich habe im Datenblatt gelesen, dass der Tiny2313 3 PWM Kanäle hat.
Zwei LEDs kann ich auch prima dimmen - in etwa so wie es im Manual unter Config Timer1 steht.
Aber wo mache ich die 3. LED dran? Timer0 und Timer2 haben irgendwie nicht die passenden Funktionen, oder übersehe ich was?
Wie der geneigt Leser sich sicher schon denken kann, handelt es sich mal wieder um einen RGB Fader. 8 Bit wären OK denk ich mal, oder gehen auch mehr?
Je einen Mega8, 16 und 32 (die Pollin-Modelle) hab ich auch noch da, wären die besser für den Zweck geeignet?
Gruß
Stefan |
|
BID = 380458
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
|
Du hast dich verlesen, der AtTiny2313 hat vier (4) PWM-Kanäle, verteilt auf zwei Timer. Anschlüsse sind PD5 und PB2,3,4.
Wie du aber auf "Timer0 oder Timer2" kommst,
Ich hab den Dingern zwar bisher nur Schritt für Schritt gesagt was sie tun sollen (kurz Assembler), aber bei mir hießen die beiden vorhandenen immer Timer0 und Timer1.
Was soll der Chip denn sonst noch machen.
Wenn es mehrere RGB-Kanäle werden sollen und der Controller praktisch nichts anderes machen soll, kann man den PWM-Generator auch Softwaretechnisch emulieren.
_________________
Reboot oder be root, das ist hier die Frage. |
|
BID = 380459
Elron Gelegenheitsposter
Beiträge: 67
|
Hi,
der Tiny2313 hat 4 PWM Kanäle
OC0A/OC0B (Timer 0) und OC1A/OC1B (Timer 1)
Ich hab auch ein kleines Testprogramm für eine RGB LED Ansteuerung in Assembler.
Allerdings ist es mein erstes "größeres" AVR Programm, also sicher noch nicht optimal programmiert, aber es läuft
Code : |
;**********************************************************
.include "tn2313def.inc" ; Definitionen für ATTiny2313
;**********************************************************
ldi r16, 0x00
out DDRD, r16 ;port D ->Eingang
ldi r16, 0xFF
out PORTD, r16 ;pull-up aktivieren
ldi r16, 0xFF
out DDRB, r16 ;port B->Ausgang
ldi r16, 0x00
out PORTB, r16 ;port B ->low
ldi r16, LOW(RAMEND) ;stack
out SPL, r16
ldi r16, 0xC3
out TCCR0A, r16 ;TCCR0A initialisieren; fast pwm auf OC0A (R)
ldi r16, 0x3 ;vorteiler 1/64
out TCCR0B, r16
ldi r16, 0xF1
out TCCR1A, r16 ;TCCR1A initialisieren; fast pwm auf OC1A/OC1B(G,B)
ldi r16, 0xB ;vorteiler 1/64
out TCCR1B, r16
ldi r16, 0xFF ;FF=Aus, 00=an
out OCR0A, r16 ;(R) pwm 0%
ldi r16, 0xFF
out OCR1AL, r16 ;(G) pwm 0%
ldi r16, 0xFF
out OCR1BL, r16 ;(B) pwm 0%
;*** Initialisierung ende ***
;*** Hauptprogramm ***
start1: rcall rt_an ;rt
lauf2: rcall bl_an ;rt,bl
rcall rt_aus ;bl
rcall gn_an ;bl,gn
rcall bl_aus ;gn
rcall rt_an ;gn,rt
rcall gn_aus ;rt
rjmp lauf2 ;Endlosschleife
;*** Tastenabfrage ***
taste: push r16
in r16, sreg
push r16
in r17, PIND ;status der eingänge in r17 schreiben
ldi r18, 0x7E
CP r17, r18 ;PIND 0 gedrückt?
breq start
ldi r18, 0x7D
CP r17, r18 ;PIND 1 gedrückt?
breq stop
ldi r18, 0x7B
CP r17, r18 ;PIND 2 gedrückt?
breq start
pop r16
out sreg, r16
pop r16
ret
;*** Unterprogramme ***
stop: rcall taste
rjmp stop
rt_an: push r16
ldi r16, 0xFF
prog4: out OCR0A, r16 ;(R)
dec r16
rcall warte
brne prog4
pop r16
ret
gn_an: push r19
ldi r19, 0xFF
prog5: out OCR1AL, r19 ;(G)
dec r19
;push r19
rcall warte
;pop r19
brne prog5
pop r19
ret
bl_an: push r20
ldi r20, 0xFF
prog6: out OCR1BL, r20 ;(B)
dec r20
;push r20
rcall warte
;pop r20
brne prog6
pop r20
ret
;------
rt_aus: push r16
ldi r16, 0x00
prog7: out OCR0A, r16 ;(R)
inc r16
rcall warte
brne prog7
pop r16
ret
gn_aus: push r19
ldi r19, 0x00
prog8: out OCR1AL, r19 ;(G)
inc r19
;push r19
rcall warte
;pop r19
brne prog8
pop r19
ret
bl_aus: push r20
ldi r20, 0x00
prog9: out OCR1BL, r20 ;(B)
inc r20
;push r20
rcall warte
;pop r20
brne prog9
pop r20
ret
warte: push r16 ;Warteschleife
in r16, sreg ;flags sichern
push r16
push r19
push r20
push r21
;ldi r20, 0x7F
ldi r21,3 ;hier ist die Zeit noch anpassbar
clr r20
clr r19
warte1: dec r19
brne warte1
dec r20
rcall taste
brne warte1
dec r21
brne warte1
pop r21
pop r20
pop r19
pop r16
out sreg, r16
pop r16
ret
|
|
|
BID = 382134
stefan_z Gelegenheitsposter
Beiträge: 57 Wohnort: Köln
|
Danke für die Antworten!
Leider ist mir schleierhaft, wie das in Bascom funktionieren soll.
Der kennt folgende Timer:
- TIMER0 is a 8 bit counter.
- The TIMER1 is a 16 bit counter.
- The TIMER2 is an 8 bit counter. (hat der 2313 garnicht - mein Fehler...)
In der Syntax steht aber nur bei TIMER1 was vom PWM - den hab ich auch benutzt und das geht ganz prima.
Jetzt frag ich mich aber, wie ich mit TIMER0 den selben Effekt hinbekommen kann wie mit 1, der ja automatisch die PWM erzeugt. In Bascom vor allem, weil Assembler ist mir echt zu hoch
Stefan Z
|
BID = 382175
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
Zitat :
stefan_z hat am 31 Okt 2006 15:47 geschrieben :
|
... weil Assembler ist mir echt zu hoch
|
Nee, zu tief
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 382221
Jornbyte Moderator
Beiträge: 7178
|
Da gabs mal eine Taschenlampe mit 3 mal PWM
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 382499
stefan_z Gelegenheitsposter
Beiträge: 57 Wohnort: Köln
|
Zitat : Jornbyte hat am 31 Okt 2006 21:20 geschrieben :
|
Da gabs mal eine Taschenlampe mit 3 mal PWM |
ah danke! Schönes script!
Aber hier wird auch nur TIMER1 für die PWM Dimmung benutzt und TIMER0 für die automatische Abschaltung (nach X Überläufen wird abgeschaltet).
Die 3xPWM bezieht sich auf verschiedene Helligkeitspresets. Oder hab ich was missverstanden?
Gruß+Dank
Stefan Z
|
BID = 382578
Jornbyte Moderator
Beiträge: 7178
|
Ist dir bekannt, wie PWM funktioniert? Dazu ist eine feste Frequenz nötig, die der Timer1 liefert. Daran kannst du so viele PWM - Kanäle knüpfen, wie du willst.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 382602
stefan_z Gelegenheitsposter
Beiträge: 57 Wohnort: Köln
|
Zitat : Jornbyte hat am 1 Nov 2006 22:36 geschrieben :
|
Ist dir bekannt, wie PWM funktioniert? Dazu ist eine feste Frequenz nötig, die der Timer1 liefert. Daran kannst du so viele PWM - Kanäle knüpfen, wie du willst. |
ja so ganz hab ichs nicht verstanden, muss ich zugeben
Aber mit zwei Kanälen funktionierts ja schon schön, ich frage mich halt nur wie ich die anderen zwei in Bascom aktiviert bekomme. Sind ja hardwaremäßig 4 angegeben.
Stefan Z
|
BID = 382662
photonic Schreibmaschine
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
ich hab keine Ahnung wie man das in Bascom macht, aber was du tun musst ist:
Timer 0 (8bit) und Timer 1 (16 bit) mit denselben Prescalern ausrüsten, so dass die PWM-Frequenz deinen Vorstellungen entspricht.
Dazu CS02,CS01,CS00 in TCCR0B ( p. 81 Datenblatt), sowie CS12,CS11,CS10 in TCCR1B (p. 111) passend setzen.
Dann die beiden Timer auf einen vernünftigen PWM-mode setzen, Timer0 auf "fast PWM" (Mode 3, p.79) und Timer1 auf fast PWM 8 bit( Mode 5, siehe p. 110)
dann noch die Output compare units konfigurieren:
Timer0: COM0A1 und COM0B1 in TCCR0A setzen
Timer1: COM1A1 und COM1B1 in TCCR1A setzen
dann hast du an den Pins OC0A,OC0BOC1A,OC1B 4 8 bit PWM-Kanäle. funktionieren Hardwaremässig ohne auch nur einen Taktzyklus Rechenzeit zu fressen.
Jeweils ansteuerbar über die Register ORC0A,OCR0B,OCR1AL,OCR1BL :
0 ist off, 0xff ist 100%
Hoffe das hilft dir weiter...
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 10 Beiträge verfasst © x sparkkelsputz Besucher : 182396603 Heute : 3799 Gestern : 7548 Online : 760 25.11.2024 14:22 10 Besucher in den letzten 60 Sekunden alle 6.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0789070129395
|