Hallo alle miteinander,
ich habe folgendes Problem: ALLE PWM Programme funktionieren auf meinem
Mega8 nicht...
Jedoch andere Programm schon, ohne Probleme, aber sobald es an die PWM
geht, funktioniert nichts mehr. Selbst mit Copy/Paste Programmen aus dem
Internet...
Habt ihr vielleicht eine Ahnung, woran das liegen könnte?
Den Controller hab ich auch schonmal ausgetauscht, und genau das selbe
Problem gehabt.
Hier ein Biespielcode:
1
#include<avr/io.h>
2
3
intmain(void)
4
{
5
uint8_tpwm_soll=20;
6
uint8_tpwm_phase=0;
7
8
9
DDRB|=(1<<PB0);
10
11
12
while(1)
13
{
14
if(pwm_soll==pwm_phase)
15
{
16
PORTB|=(1<<PB0);
17
}
18
pwm_phase++;
19
if(pwm_phase==100)
20
{
21
pwm_phase=0;
22
PORTB&=~(1<<PB0);
23
}
24
}
25
return0;
26
}
Leider habe ich keinen Schematischen Aufbau zur Hand, sondern nur dieses
Foto.
Die LED an PB0 soll zur PWM genutzt werden. Dort hängt auch ein RC-Glied
dran, das hat aber nach try/error keine Auswirkungen da drauf.
VG
Lavy
Svenja S. schrieb:> Habt ihr vielleicht eine Ahnung, woran das liegen könnte?
Ja.
An dir selber.
Lies die Dokumentation und versuche, die kopierten Quellen zu verstehen.
W.S.
Copy & paste-Programme aus dem Internet....
Setz dich hin und lies die wenigen Seiten über die diversen PWM-Modi.
Beliebter Anfängerfehler: den betreffenden Port nicht als Ausgang
gesetzt.
W.S. schrieb:> Lies die Dokumentation und versuche, die kopierten Quellen zu verstehen.
Ich verstehe sie ja... ich habe ja auch eigene. Ich verstehe nur nicht,
warum sie auf einmal nicht mehr funktionieren.
Es hat ja auch schonmal vor einer Weile geklappt, jedoch habe ich dann
etwas umgebaut und seit dem nichts mehr (und ja, ich habe auch schon
alles wieder in den Ursprung zurück gebaut, und trotzdem nichts). Kurios
ist eben wirklich, dass jedes andere Programm funktioniert, aber nichts
mit PWM.
H.Joachim S. schrieb:> Copy & paste-Programme aus dem Internet....>> Setz dich hin und lies die wenigen Seiten über die diversen PWM-Modi.> Beliebter Anfängerfehler: den betreffenden Port nicht als Ausgang> gesetzt.
Das Copy/Paste kam erst, als ich angefangen habe an meinem Code zu
zweifeln. Ich wollte checken, ob es an mir liegt, oder eben bspw. ein
Hardwarefehler ist.
Svenja S. schrieb:> ob es an mir liegt
Ja tut es!
Überleg mal wie schnell der µC die 20 oder 100 hochgezählt hat...
Dass kann so nicht gehen, deshalb wirkt es so, als w+ürde die LED dauer
AN sein.
Adam P. schrieb:> Das ist doch gar kein richtiges PWM.
Das weiß ich, das war jetzt der letzte den ich ausprobiert hatte. Dort
sollte die LED ja zumindest leuchten, was sie allerdings leider mocht
macht :( Spreche ich sie aber ganz alleine an, ist das garkein Problem,
dann macht sie was sie soll...leuchten.
Adam P. schrieb:> Überleg mal wie schnell der µC die 20 oder 100 hochgezählt hat...> Dass kann so nicht gehen, deshalb wirkt es so, als w+ürde die LED dauer> AN sein.
Ich gebe zu, der code ist gerade ein sehr schlechtes Beispiel dafür.
Aber sie geht ja noch nicht einmal an...
Svenja S. schrieb:> Aber sie geht ja noch nicht einmal an...
Starte hier: Absolute Beginner-AVR Steckbrettprojekte
Wenn das "LED Blinken lassen" geht hast du im Prinzip deine PWM, nur so
langsam dass man mit dem Auge hinterherkommt.
Und falls du die PWM Peripherie nicht verwenden möchtest,
dann initialisier dir zumindest ein Timer mit Interrupt, dass du eine
feste Zeitbasis hast.
Dann kannst du solche Dinge viel einfacher lösen.
Edit:
Im oberen Code habe ich es auf PORTD Pin6 geändert,
habs vergessen wieder auf deine Konfig zu ändern.
Beliebte Standart-Fehler : Da suche ich bei meinen Projekten immer als
erstes. ;)
1. LED steckt falsch herum drin (nachschauen)
2. Pin nicht als Ausgang deklariert (nachschauen)
3. Wert der Variable ist falsch (als via Monitor anzeigen lassen).
4. Kein Vorwiderstand. (LED-Testschaltung nutzen um zu schauen ob die
überhaupt noch geht. Reiche Leute haben ein LED-Tester ;) )
5. LED ist nicht dimmbar. (Es gibt einige da geht es einfach nicht, im
Datenblatt schauen).
6. Notfalls mit einer kleinen analogen Birne den PWM testet. Ein Birne
mit 5 Volt glimmt i.d.R. schon ab 2 Volt je nach Modell.
Wenn das alles getestet ist, dann überlege ich wo der Fehler sonst
steckt. Ist bisher nur sehr sehr selten vorgekommen. 99% aller Fehler
sind Flüchtigkeitsfehler. Sagte schon mein Lehrer damals in der
Grundschule. Recht hatte er zufälligerweise ;)
Hallo,
Schlaumaier schrieb:> 5. LED ist nicht dimmbar. (Es gibt einige da geht es einfach nicht, im> Datenblatt schauen).
Kannst du mal ein Beispiel nennen.
rhf
Hugo H. schrieb:> Beitrag "Bitweise Darstellung mit 10 LEDs"
Ja ich wollte es auch schon erwähnt haben, aber dachte mir, dass gehört
ja nicht in diesen Post.
Roland F. schrieb:> Kannst du mal ein Beispiel nennen.
Leider nein. Aber ich hatte mal ein paar "billig LED's" aus der
Grabeltüte da hat es nicht funktioniert. Die gingen entweder an oder
aus. Als ich das Teil gegen welche "mit Datenblatt" ausgetauscht habe,
funktionierte es.
k.a. warum. Jedenfalls kaufe ich seit dem nur noch welche mit
Datenblatt.
Svenja S. schrieb:> IMG_20210826_104121.jpg
1. Ich sehe da mal wieder keinen einzigen Abblockkondensator am Mega8.
Bitte immer mindestens einen 100nF parallel zur Versorgung nahe dem MC
schalten.
2. Steckbrettprojekte führen einen wg. der schlechten Kontaktgabe der
Federleisten gerne an der Nase rum.
3. Es gibt nicht einfacheres, als im Steckbrett die Funktion einer LED
zu kontrolieren.
Hallo,
Dein Code funktioniert schon, nur die Logik ist je nach Ansicht
verdreht, kannst du korrigieren. Ich habe den Endwert zum ausschalten
auf 200 erhöht.
Wenn du jetzt den Wert von pwm_soll zwischen 0 und 200 änderst, dann
solltest du eine Helligkeitsänderung sehen.
Wenn du am Ende der while ein 2ms delay einbaust und pwm_soll auf 100
setzt, dann solltest du ein 50:50 blinken sehen.
Damit kannste in Ruhe rumspielen. Bei der PWM Geschichte immer daran
denken wann wird eingeschalten und wann wird ausgeschalten und man
benötigt 2 Zeiträume. Beide Zeiträume addiert ergeben die Periodendauer.
Der Keramik links Reihe 30 sollte direkt neben die VCC/GND Pins am µC.
Ein kleiner Elko in die Versorgungsschiene nahe µC kann auch nicht
schaden.
Hallo,
falls einfach nur die Frage falsch gestellt ist und du das PWM Dimming
sehen möchtest, dann muss man sich die Funktionalität eines
Hardware-Timer nachbauen. Man benötigt einen Timerzähler und einen
Pulsweitenzähler. Beide Zähler setzt man an entsprechenden Stellen
zurück. Das Bsp. lässt die LED aufdimmen. Dafür lassen wir
kontinuierlich die Pulsweite erhöhen. Ohne logarithmische Anpassung
sieht das nicht ganz linear aus. Probiere es aus.
Matthias S. schrieb:> 1. Ich sehe da mal wieder keinen einzigen Abblockkondensator am Mega8.> Bitte immer mindestens einen 100nF parallel zur Versorgung nahe dem MC> schalten.
Das kann man nicht deutlich genug sagen!
Vorher braucht man gar nicht an der Software rummachen, wenn man nicht
sicher ist, ob der µC ein Programm überhaupt abarbeiten kann.