Forum: Compiler & IDEs PWM - Des Einsteigers größte Hürde :/


von Borsty (Gast)


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

von Peter D. (peda)


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

von Carbolo C. (carbolo)


Lesenswert?

eine gute Quelle ist vielleicht noch das hier:

http://www.lugbz.org/documents/smart-questions_de.html


GRuss

von Falk B. (falk)


Lesenswert?

@ Borsty (Gast)

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

Das soll vorkommen.

AVR-Tutorial: PWM

MFG
Falk

von Borsty (Gast)


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.

von Borsty (Gast)


Lesenswert?

Achja, bevor ichs vergesse. PortB 7 ist als Ausgang definiert ( Simples 
ein und aus schalten funktioniert ja anstandslos )

von Falk B. (falk)


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

von Borsty (Gast)


Lesenswert?

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

>DDRB |= (1<<PB7);

gug ma einen über dir :)

von Andreas Paulin (Gast)


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)

von Falk B. (falk)


Lesenswert?

@ Borsty (Gast)

>>DDRB |= (1<<PB7);

>gug ma einen über dir :)

Klassische Race condition. Als ich meine Antwort schrieb war dein 
Beitrag noch nicht drin. Als ich meine Antwort abgeschickt hatte, war 
dein Beitrag vor meiner Antwort drin. ;-)

MfG
Falk

von Borsty (Gast)


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

von Falk B. (falk)


Lesenswert?

@ Borsty (Gast)

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

Drisch

Die viruelle Watschn hast du dir redlich verdient.

MfG
Falk

von Andreas Paulin (Gast)


Lesenswert?

... hab das Datenblatt vom 2561 aber nicht gelesen - Ohne 
Gewähr.....check it!!

von Borsty (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.