PWM - Des Einsteigers größte Hürde :/

Gast #648965
Lesenswert?

Ersma Moin an alle hier ^^

Kommen wir mal direkt zu meinem Problemchen:

Ich hab mir vor kurzer Zeit das Set D072 von display3000 bestellt um in 
die weite Welt der µC einzusteigen ;P

Paket kam gestern und bastel seitdem ein wenig mit dem Modul herum.
Heute hatte ich mir vorgenommen einmal die Display-Dimmung in angriff zu 
nehmen. Ich hab einiges bereits ausprobiert was ich hier im Forum 
gefunden hab... Bisher allerdings ohne Ergebnis :(

Folgendes:

  Ich arbeite mit dem AtMega 2561 auf 14,7456 Mhz
  Port B.7 ist mit der Display-Beleuchtung verbunden (ein/aus 
funktioniert)
  Das Datenblatt sagt mir zu diesem Pin folgende Alternativen:
    OC0A/OC1C/PCINT7

  Wie gesagt, probiert hab ich vieles doch nichts brachte bisher meinen 
erhofften Erfolg :/

Ich hoffe das ihr mir ein wenig unter die Arme greifen könnt :)

Mfg Borsty
#649062
Lesenswert?

Borsty wrote:

>   Wie gesagt, probiert hab ich vieles doch nichts brachte bisher meinen
> erhofften Erfolg :/
>
> Ich hoffe das ihr mir ein wenig unter die Arme greifen könnt :)


Da gibts 2 Wege:

Du zeigst, was Du gemacht hast und kommentierst, wie Du denkst, das es 
funktioniert und dann guckt sich das jemand an und hilft.


Oder Du zeigst garnichts und wartest, bis Dir die gebratenen Tauben in 
den Mund fliegen (das kann dauern).


Peter
Gast #649341
Lesenswert?

Oh mann, ich sollte um halb 12 keine Beiträge mehr schreiben :P

Also gut, Ich hab mir bereits diverse Tutorials über PWM auf den Atmel 
µProcs durchgelesen. Mein Problem ist, das ich bevorzugt in C schreibe 
und in dem GCC-Avr Tutorial sind nur drei Tabellen und drei Zeilen Code 
gezeigt.
1
TCCR1A = (1<<WGM11)|(1<<WGM10)|(1<<COM1A1);  // Nicht inv. 10 Bit PWM
2
TCCR1B = (1<<CS12) | (1<<CS10);  // Vorteiler von 1024
3
OCR1A = 128; // Vergleichswert

Leider hab ich den Code der mir probleme bereitet hatte aus Frust wieder 
aus dem Projekt entfernt :X

Was ich bisher nicht verstehe ist, wie ich den oben stehenden Code nun 
auf mein Port B 7 bekomme. ( Laut datenblatt OC0A )

Meine Idee ( eventuell stell ichs mir ganz einfach zu simpel vor oO ):
1
TCCR0A = (1<<WGM11)|(1<<WGM10)|(1<<COM1A1);  // Nicht inv. 10 Bit PWM
2
TCCR0B = (1<<CS12) | (1<<CS10);  // Vorteiler von 1024
3
OCR0A = 128; // Vergleichswert
Allerdings ohne erfolg.
#649351
Lesenswert?

@ Borsty (Gast)

>Oh mann, ich sollte um halb 12 keine Beiträge mehr schreiben :P

Genau, da wird auch die Mutti böse ;-)

>Meine Idee ( eventuell stell ichs mir ganz einfach zu simpel vor oO ):

>TCCR0A = (1<<WGM11)|(1<<WGM10)|(1<<COM1A1);  // Nicht inv. 10 Bit PWM
>TCCR0B = (1<<CS12) | (1<<CS10);  // Vorteiler von 1024
>OCR0A = 128; // Vergleichswert

Alles richtig. Es feht aber noch eine Kleinigkeit. Du must das Pin als 
Ausgang schalten.

DDRB |= (1<<PB7);

MFG
Falk
Gast #649361
Lesenswert?

Hm.. auf den ersten Blick: Nicht ganz so einfach.

Ich kenne jetzt DEINEN Controller im speziellen nicht, rödel gerade auf 
einem atmega128 herum, aber check mal:
Die Register- und Bitdefinitionen sind vermutlich die falschen.

Register:
Du hast alles 1:1 von T1 auf T0 umgestrickt, aber es GIBT z.B. gar kein 
TCCR0A-Register, nur ein TCCR0-Register.
Timer0 ist (zumindest bei meinem ATMEGA128)ein 8-bit-Timer, T1 ein 
16-Bit-Timer..)

Bitdefinitionen:
Du verwendest Timer0, aber die Bitdefinitionen für Timer1 (CS12, 
COM1A1...)

Check mal das Datenblatt und die Register-und Bitdefinitionen in Deiner 
ioxxxx.h (WinAVR\avr\include\avr)
Gast #649363
Lesenswert?

ÖÖööööhm Ok... hat sich erledigt.

Hab ein neues Projekt angefangen und dan oben genannten code benutzt.
Funktioniert nun Spitzenmäßig.

Das nächste Ziel werden nun die Interrupts sein =)
Mal gugn wie lange ich dabei ohne Forum auskommt fg
Gast #649382
Lesenswert?

Ich glaub mal das das mit den Konstanten bei den Timer ähnlich wie bei 
den Pins aussieht.

PA1, PB1, PC1, PD1 usw haben alle den Wert 1 ^^

>Die viruelle Watschn hast du dir redlich verdient.

Jo, habs verdient ;P

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren