PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie an OCR0A und OCR0B bei ATtiny2313 rankommen (PWM-Frage)



E-Fan
14.05.2006, 11:07
Hallöle zusammen!

Nach nem bissel Rumfummel- und Austesterei hab ich beim ATtiny2313 die Beiden Hardware-PWM Ausgänge der Output-Compare Register 1A und 1B (OCR1A und OCR1B) zum laufen bekommen. Nun möchte ich aber noch die beiden anderen Register (OCR0A und OCR0B) nutzen um die zwei "restlichen" PWM-Ausgänge zur Verfügung haben zu können - nur... ich hab absolut NULL Schimmer wie ich die beiden Ausgänge initialisieren kann. Weder die Bascom-Hilfe, die grundsätzlich von zwei OC-Registern pro Timer ausgeht, noch die Bedienungsanleitung des µC haben mir bislang helfen können.
Vielleicht hat ja jemand von euch alle 4 Hardware-PWM beim 2313 zum laufen gebracht und könnte sich mal dazu äussern.

Hanni
14.05.2006, 12:39
Hallo,

auch wenn das jetzt hart klingen mag, das steht im Datenblatt (http://atmel.com/dyn/resources/prod_documents/doc2543.pdf) (Seite 77 ff).

Aber deswegen bekommste trotzdem ne Antwort:

Die beiden anderen PWM Ausgänge, also die die mittels OCR0A und OCR0B gesteuert werden können, werden vom Timer 0 angesteuert.
Das einzige Problem das du haben dürftest ist also die entsprechenden Bits in den entsprechenden Registern richtig zu setzen.

für ne Phase Correct PWM wären das z.B.:

TCCR0A:
- WGM00
- COM0A1
- COM0B1

TCCR0B:
- CS00

Ob und wie sich das allerdings in Bascom realisieren lässt, kann ich nicht sagen, zumal diese Programmiersprache den Timer 0 ja auch ganz gerne für andere Dinge benutzt (z.B. Servosteuerung) ...

Meiner Meinung nach dürfte es also notwendig sein, diese Funktionen per Hand einzuprogrammieren.

Zum laufen bekommen hab ich die 4 PWM's zur gleichen Zeit schon, allerdings nur in Assembler ...

Ratber
14.05.2006, 14:42
Unter Bascom lassen sich die Register unter ihren Namen ansprechen.

Also zb.:



Tccr0a = &B10100011 'Manuelle Konfiguration von OC0a
Tccr0b = &B11000001 'Manuelle Konfiguration von OC0b
Tcnt0 = 255 'Timer Counter Register 0

Der Codeschnipsel ist zwar von nem Tiny13 aber das geht bei "jedem" AVR.
Die Namen der Register sind aus dem Datenblatt zu bekommen.

E-Fan
14.05.2006, 22:32
@Hanni:
Ich hab sämtliche Seiten der Bedienungsanleitung zum Thema Hardware-PWM durchgelesen, es ausprobiert, mich grundsätzlich mit dem Timer0 beschäftigt um dann heute festzustellen das ich die ganze Zeit am Timer1 rumgefuhrwerkt hab.
Obwohl ich von Assembler keine Ahnung hab, hab ich trotzdem versucht die Register direkt anzusprechen - beim Timer1 geht das auch ohne Probleme. Mir bereitet eben nur die Intialisierung der PWM des Timer0 Kopfzerbrechen.
Mal schauen wann ich das austesten kann. Heute und morgen wird's jedenfalls nüscht mehr weil mich mein Auto heute hat stehen lassen (ist nicht mehr angesprungen :( )

@Ratber:
Danke für den Codeschnipsel!

E-Fan
18.05.2006, 21:21
So nu hab ichs ausgetestet und festgestellt das ich auf dem richtigen Weg war, allerdings einen Zahlendreher hatte.

Trotzdem Danke für die Hilfe!