3 x PWM in Bascom

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 18 10 2024  14:32:47      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
3 x PWM in Bascom
Suche nach: pwm (3615)

    







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
ICQ Status  

 

  

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
ICQ Status  


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: 7155

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: 7155

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...


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


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 22 Beiträge im Durchschnitt pro Tag       heute wurden bisher 9 Beiträge verfasst
© x sparkkelsputz        Besucher : 182195876   Heute : 2283    Gestern : 4612    Online : 858        18.10.2024    14:32
5 Besucher in den letzten 60 Sekunden        alle 12.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0359878540039