PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 16-Bit PWm mit ATMega 32



Dr.Ice2000
08.01.2009, 23:34
Hallo,

ich möchte gerne mit dem ATMega32 ein 16-Bit-PWM Signal ausgeben und das Ganze gerne in Bascom.

Da Bascom aber anscheinend nur 8,9,10 Bit mit dem Timer1 zulässt muss ich wohl die Register von Hand setzen.

Im Datenblatt auf Seite 99 steht dann das ich ICR1 oder OCR1a auf Max setzen soll. Nun meine Fragen :

geht das dann mit

OCR1a = &HFF ??

und wie stelle ich dann das Puls/Pausenverhältnis ein ?

Mit 8 oder auch 10Bit und den Bascom Standard-Befehlen läuft mein Programm problemlos, erzeugt auch einen schönen Sinus per PWM, allerdings reicht mir da leider die Auflösung nicht.

Die Suche hier im Forum und bei Google hat mir leider nicht geholfen.

Ich hoffe mir kann da jemand helfen. Vielen Dank schon mal im Vorraus.

Gruß Markus

coolmaxx
21.05.2009, 20:30
@Markus
hast du eine Lösung gefunden? ich suche auch...

LG Jan

Dr.Ice2000
21.05.2009, 20:48
Hi Jan,

16bit habe ich nicht hinbekommen. Zumindest nicht mit 20kHz. Ich habe dann mit folgenden Einstellungen immerhin 13bit geschafft.



Enable Timer0
Enable Interrupts
Start Timer0

'Tccr1a = &B11000000
Set Tccr1a.7 'COM1A1
Set Tccr1a.6 'COM1A0
Reset Tccr1a.5 'COM1B1
Reset Tccr1a.4 'COM1B0
Reset Tccr1a.3 'FOC1A
Reset Tccr1a.2 'FOC1B
Set Tccr1a.1 'WGM11
Reset Tccr1a.0 'WGM10

'Tccr1b = &B00010000
Reset Tccr1b.7 'ICNC1
Reset Tccr1b.6 'ICES1
Reset Tccr1b.5 'obsolete
Set Tccr1b.4 'WGM13
Set Tccr1b.3 'WGM12
Reset Tccr1b.2 'CS12
Reset Tccr1b.1 'CS11
Reset Tccr1b.0 'CS10

Icr1h = &B00011111 '13 Bit Auflösung setzen
Icr1l = &B11111111

Set Tccr1b.0 'Timer an, kein Prescaler



Mehr war leider nicht drin, aber vieleicht schaffst Du es ja, wenn Du sonst nicht viel erledigen musst. Eingestellt wird einfach nur mit Icr1H und L.

Gruß Markus

TobiasBlome
31.05.2009, 07:56
tja und warum nicht software PWM? eventuell 2. µC?

Tobias

Sauerbruch
31.05.2009, 09:03
Na ja - wenn man ein PWM-Signal mit einer Frequenz von 20 kHz und einer Auflösung von 16 bit erzeugen möchte, bräuchte man selbst im Fast-PWM-Modus eine Taktfrequenz von lustigen 1,31 GHz :shock: (20.000 * 2^16...). Das dürfte hier wohl der limitierende Faktor sein - aber prinzipiell geht 16bit-PWM sehr gut, wenn man die entsprechenden Register direkt setzt.

kywalda
20.06.2011, 11:41
'Mac_Dimm
'Laesst eine LED an PB4 ein- und ausatmen
'Arne Groh
'2011-06-20
'
'Fusebits
'1111 1111
'1111 1111
'1101 1111
'1110 0100

$regfile = "attiny2313.dat"
$crystal = 8e6

Dim I As Byte
Dim Ocr1b As Word

'Fast PWM-Mode 15 einstellen
Tccr1a = &B1010_0011
Tccr1b = &B0001_1001

'niedrigste Frequenz einstellen (damit man das PWM voll ausreizen kann)
Ocr1ah = &HFF : Ocr1al = &HFF

'OC1B als Output (PB4)
Set Ddrb.4

'Globale Interrupts aktivieren
Set Sreg.7



Do

'Einatmen
For I = 0 To 255 Step 1
Ocr1b = Lookup(i , Fade256)
'Tastverhaeltniss einstellen
Ocr1bh = High(ocr1b) : Ocr1bl = Ocr1b
Waitms 13
Next I

'Verharren
Waitms 150

'Ausatmen
For I = 255 To 0 Step -1
Ocr1b = Lookup(i , Fade256)
'Tastverhaeltniss einstellen
Ocr1bh = High(ocr1b) : Ocr1bl = Ocr1b
Waitms 8
Next I

'Verharren
Waitms 400

loop


'--------------------PWM DATA----------------------------

'(
Fade64:
Data 0% , 1% , 1% , 1% , 2% , 2% , 3% , 3%
Data 4% , 5% , 6% , 7% , 8% , 10% , 12% , 14%
Data 17% , 20% , 24% , 28% , 34% , 40% , 48% , 57%
Data 68% , 82% , 97% , 116% , 138% , 165% , 197% , 234%
Data 280% , 333% , 398% , 474% , 565% , 674% , 804% , 959%
Data 1143% , 1363% , 1625% , 1938% , 2311% , 2756% , 3287% , 3920%
Data 4674% , 5574% , 6647% , 7926% , 9452% , 11271% , 13440% , 16027%
Data 19112% , 22791% , 27178% , 32409% , 38648% , 46087% , 54958% , 65535%
')

Fade256:
Data 0% , 1% , 1% , 1% , 1% , 1% , 1% , 1% , 1% , 1% , 2% , 2% , 2% , 2% , 2% , 2%
Data 2% , 2% , 2% , 2% , 2% , 2% , 3% , 3% , 3% , 3% , 3% , 3% , 3% , 4% , 4% , 4%
Data 4% , 4% , 4% , 5% , 5% , 5% , 5% , 5% , 6% , 6% , 6% , 6% , 7% , 7% , 7% , 8%
Data 8% , 8% , 9% , 9% , 10% , 10% , 10% , 11% , 11% , 12% , 12% , 13% , 14% , 14% , 15% , 15%
Data 16% , 17% , 18% , 18% , 19% , 20% , 21% , 22% , 23% , 24% , 25% , 26% , 27% , 28% , 30% , 31%
Data 32% , 34% , 35% , 37% , 39% , 40% , 42% , 44% , 46% , 48% , 50% , 52% , 55% , 57% , 60% , 62%
Data 65% , 68% , 71% , 74% , 77% , 81% , 84% , 88% , 92% , 96% , 100% , 105% , 110% , 115% , 120% , 125%
Data 130% , 136% , 142% , 149% , 155% , 162% , 169% , 177% , 185% , 193% , 202% , 210% , 220% , 230% , 240% , 250%
Data 262% , 273% , 285% , 298% , 311% , 325% , 340% , 355% , 371% , 387% , 404% , 422% , 441% , 461% , 481% , 502%
Data 525% , 548% , 572% , 598% , 624% , 652% , 681% , 711% , 743% , 776% , 811% , 847% , 884% , 924% , 965% , 1007%
Data 1052% , 1099% , 1148% , 1199% , 1252% , 1308% , 1366% , 1427% , 1490% , 1556% , 1625% , 1698% , 1773% , 1852% , 1934% , 2020%
Data 2110% , 2204% , 2302% , 2404% , 2511% , 2623% , 2739% , 2861% , 2988% , 3121% , 3260% , 3405% , 3556% , 3714% , 3879% , 4052%
Data 4232% , 4420% , 4616% , 4822% , 5036% , 5260% , 5494% , 5738% , 5993% , 6259% , 6537% , 6828% , 7132% , 7449% , 7780% , 8125%
Data 8487% , 8864% , 9258% , 9669% , 10099% , 10548% , 11017% , 11507% , 12018% , 12552% , 13110% , 13693% , 14302% , 14938% , 15602% , 16295%
Data 17020% , 17776% , 18566% , 19392% , 20253% , 21154% , 22094% , 23076% , 24102% , 25173% , 26292% , 27461% , 28682% , 29957% , 31288% , 32679%
Data 34132% , 35649% , 37234% , 38889% , 40617% , 42423% , 44308% , 46278% , 48335% , 50484% , 52728% , 55072% , 57520% , 60076% , 62747% , 65535%