PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software PWM mit selbstgelöteter Platine



vashan
04.04.2007, 15:36
Hallo!

ich bräuchte wohl hilfe bei der Fehlersuche....
Es geht dabei um die Helligkeitssteuerung einer LED mittels Pulsweitenmodulation(PWM), wobei die Pulsbreite per Poti verändert werden soll.

Problem: Es tut sich nichts... , die LED leuchtet nicht und ich weiß so langsam auch nicht mehr weiter :-/
Der Tansistor ist vom Typ BC547
Die Leuchtdiode ist eine superhelle, (Coninuous Forward Current If=50mA)
Poti = 47kOhm

Hier die Schaltung:
http://img99.imageshack.us/img99/6788/pwmprojekt01ek3.th.jpg (http://img99.imageshack.us/my.php?image=pwmprojekt01ek3.jpg)

...und die vom Poti

http://img113.imageshack.us/img113/5067/pwmprojekt02pz2.th.jpg (http://img113.imageshack.us/my.php?image=pwmprojekt02pz2.jpg)

So sieht die Platine aus.
http://img113.imageshack.us/img113/6808/dsc00247ox7.th.jpg (http://img113.imageshack.us/my.php?image=dsc00247ox7.jpg)

Das ist das Programm womit ich die PWM und die Analogverarbeitung betreibe.



;-------------------------------------------------------------------------
; Titel : Helligkeitssteuerung einer Leuchtdiode mittels PWM
;-------------------------------------------------------------------------
; Funktion : Mittels eines Potentiometers wird die Pulsbreite verändert,
; dadurch wird die LED dunkler bzw heller leuchten.
; Schaltung : PORTB1=LED-Rot, PORTC0=Pot1
;-------------------------------------------------------------------------
; Prozessor : ATmega8
; Takt : 3686400 Hz
;-------------------------------------------------------------------------
.include "avr.h"

begin: rjmp main ; 1 POWER ON RESET
reti ; 2 Int0-Interrupt
reti ; 3 Int1-Interrupt
reti ; 4 TC2 Compare Match
reti ; 5 TC2 Overflow
reti ; 6 TC1 Capture
reti ; 7 TC1 Compare Match A
reti ; 8 TC1 Compare Match B
reti ; 9 TC1 Overflow
reti ;10 TC0 Overflow
reti ;11 SPI, STC Serial Transfer Complete
reti ;12 UART Rx Complete
reti ;13 UART Data Register Empty
reti ;14 UART Tx Complete
rjmp onADC ;15 ADC Wandlung komplett
reti ;16 EEPROM Ready
reti ;17 Analog Comparator
reti ;18 TWI (I²C) Serial Interface
reti ;19 Store Program Memory Ready

;------------------------------------------------------------------------
; Initialisierungen
;------------------------------------------------------------------------
main:
;--- Stack Initialisierung ---
ldi r16,hi8(RAMEND)
out SPH,r16
ldi r16,lo8(RAMEND)
out SPL,r16
; Ports initialisieren
sbi DDRB,1 ; PORTB1 auf Ausgang
;--- Interrupts erlauben ---
sei
;--- Timer 0 initialisieren ---
ldi r16,0b00000100 ; Teiler 1/256
out TCCR0,r16 ; Teiler+Modus schreiben
ldi r16,0b01100000 ; Port, Referenzspannung und Auflösung
out ADMUX,r16
ldi r16,0b11101101 ; Modus, Interrupt und Start
out ADCSRA,r16
;----------------------------------------------------------------------
; PWM und ADC initialisieren
rcall initPWM ;Schritt auf/ab
rcall initADC
;------------------------------------------------------------------------
; Hauptprogramm-Schleife
;------------------------------------------------------------------------
mainloop: wdr
out OCR1AH,r27
out OCR1AL,r26
rjmp mainloop ; Sprung zum Beginn der Hauptprogrammschleife
;------------------------------------------------------------------------
; UP: ADC initialisieren
; Beachte: Interrupt-Vektor "onADC" setzen
;------------------------------------
initADC: push r16
ldi r16,0
out ADMUX,r16 ; ADC Chanel
ldi r25,0b11011101
out ADCSRA,r25 ; enable ADC, INT, start
sei
pop r16
ret
;------------------------------------
; ISR: ADC initialisieren
; PA: r27:r26 10Bit, r25 8Bit
onADC: cli
in r26,ADCL
in r27,ADCH
asr r27
ror r26
asr r27
ror r26
mov r25,r26
sbi ADCSRA,6
sei
reti
;------------------------------------------------------------------------
; UP PWM initialisieren
; Parameter: keine
; PWM Chanel A Mode 1: 8-bit PWM, Phase-Correct, Clock/8
initPWM: push r16
sbi PORTB,1 ; PWM-Chanel A
ldi r16,0b10000001 ; PWM-Mode
out TCCR1A,r16
ldi r16,0b00000010 ; Vorteiler / PWM Frequenz
out TCCR1B,r16
pop r16
ret
;------------------------------------------------------------------------



(siehe auch https://www.roboternetz.de/phpBB2/viewtopic.php?t=29280 )

Als Hardware wird das AVR Testboard verwendet, daher auch die Ports, als Software myAVR Workpad... ich hoffe ihr habt eine Idee woran es liegen kann. Im Chat hat man mir geraten doch mal den Transistor auszulöten, es hat leider auch keinen Effekt gehabt. :(

Gruß Vashan

uwegw
04.04.2007, 16:23
Die Transistorschaltung ist Mist! Die LED wird aus dem Steuersignal gespeist und nicht direkt aus der 5V-Versorgung. Wenn du Pech hast, könnte das schon den Pin des AVRs gegrillt haben. Da der Vorwiderstand aber ziemlich groß ist (je nach Farbe der LED müsste er viel kleiner sein), stehen die Überlebenschancen gut.

Richtig wäre:
PWM über die 10k an die Basis des Transistors
von 5V aus über die 100 Ohm und die LED an den Kollektor
Emitter an Masse

vashan
04.04.2007, 18:33
hi,
also ich hab das ganze jetzt so gelötet wie du geschrieben hast.

http://img133.imageshack.us/img133/7415/pwmprojekt003td7.th.jpg (http://img133.imageshack.us/my.php?image=pwmprojekt003td7.jpg)

http://img259.imageshack.us/img259/8329/dsc00248nc8.th.jpg (http://img259.imageshack.us/my.php?image=dsc00248nc8.jpg)

Leider funktioniert es immer noch nicht. Was könnt ich denn sonst noch machen ?
Achja, der Port funktioniert noch einwandfrei. Auf dem Board klappt auch alles nur eben mit meiner selbstgebauten Platine nicht ?! ...

Gruß Vashan

uwegw
04.04.2007, 19:29
Die 10k Basiswiderstand sind recht groß bemessen. Probier mal was kleineres, z.B.1k

Funktioniert auf dem myavr das komplette Programm? Also mit den dort eingebauten Poti und LEDs? Dann kommt eigentlich nur nioch nen Lötfehler in Frage.
Mess mal alle Lötverbindungen nach.

vashan
04.04.2007, 19:37
hi nochmals!
Ich hab leider keinen anderen Widerstand mehr... also kann ich das schlecht ausprobieren.
Zu dem Programm: Ja, es funktioniert wirklich, nur eben halt nur auf dem Testboard. Kann es vielleicht auch an dem Poti liegen?
Ich werd mir dann jetzt mal die Lötverbindungen anschauen....

uwegw
04.04.2007, 19:41
Gib doch mal den Wert über das onboard-Poti vor. Dann weißt du, ob das externe Poti Schuld sein kann.

vashan
04.04.2007, 20:00
da tut sich leider auch nichts

vashan
04.04.2007, 20:53
sogar wenn ich auf PortB1 ein 1 signal anlege tut sich nichts?!

Was kann ich jetzt denn noch ausprobieren? Ist der Transistor vielleicht defekt?......

vohopri
04.04.2007, 21:58
Hallo

Der 10 k basiswiderstand kann schon passen, kommt auf die Stromvertärkung des Transistors an. Ist die bekannt? Such sie aus dem Datenblatt raus.

Grenze doch den Fehler ein, in dem du die LED Schaltstufe und die Microcontroller Steuerung getrennt testest.

1. teste die Schaltstufe:
A) Überbrücke Collector und Emitter des Schalttransistors, dann muss die LED leuchten, andernfalss ist sie dahingeschieden.

B) Steuere den Transistor ohne den Controller mit einem Widerstand 10 k nach +5V durch, dann muss die LED leuchten, andernfalls ist sie den weg aller irdischen Komponenten gegangen.

2. Hast du das PWM Signal am Controller Ausgang? Schau mit Oszi nach, oder verändere das Programm auf langsam und miss mit dem Multimeter. Du kannst dir solche Signale auch mit einem hochohmigen! Kopfhörer und einem Serienwiderstand anhören. Ist die erwartete Frequenz da? Verändert sich das Tastverhältnis? Das muss sich etwa wie Obertongesang anhören, wenn du das Tastverhältnis veränderst.

Ist das Signal da, bekommt es die Schaltstufe auch ?
Ist das Signal nicht da, debugge.

Das sind nur erte Vorschläge, der Kern meines Hinweises ist aber: Frage nicht unspezifisch: was kann falsch sein? Das ist schon bekannt: Alles kann falsch sein und Murphy hatte recht.
Gehe systematisch vor und hake ab, was funktioniert. Auf der Basis dieser Information kannst du dann gezielte und nachvollziehbare Fragen stellen, oder es klärt sich bald wie von selbst auf.

Ja, und nochwas: dokumentiere bei allen Tests in allen Betriebszuständen die massgeblichen Spannungen. Auch das hilft, dir selbst oder an uns die richtigen Fagen zuj stellen.

Grüsse,
Hannes

vashan
09.04.2007, 17:51
Hallo!

Also ich habe den Fehler gefunden, warum die LED nicht leuchten wollte. Es war wohl ein Lötfehler. Jetzt habe ich aber ein ganz anderes Problem:
Die LED leuchtet zwar, aber lässt sich nicht mit dem auf meiner Platine befindlichen Potis steuern... Es funktioniert leider nur mit dem auf dem Testboard (sind beides 47kOhm Potis). Das Poti ist richtig angeschlossen
Der High(+5V) geht an einen der seitlichen Pins; der Pin in der Mitte geht auf den ADC Port, bei mir ist das PORTC0. Der andere seitliche Pin geht an Low (-). Ein Freund meinte, dass das ist nicht mal notwendig ist. Stimmt das?
So nochmal zurück zu dem Problem... ich bekomme immer nur 5V an PORTC0, das habe ich schon durchgemessen. Der Widerstand verändert sich auch, wenn ich denn daran drehe. Es bleibt trotzdem bei 5V, unverändert....

Gruß Vashan

Hubert.G
09.04.2007, 18:54
Wenn du nur 0V am PortC0 hast dann fehlen die 5V auf einer Seite. Du hast allerdings geschrieben das die 5V auch auf die Mitte gehen, das wäre falsch. Ein Bein an +5V, die Mitter an PortC0 und das dritte an GND.

vashan
09.04.2007, 19:08
oh^^, ja hab mich verschrieben, jetzt sollt es stimmen. Naja ich habs so angeschlossen wie du auch schon geschrieben hast, es bleibt bei 0V?! Hat jemand ne Idee?

Hubert.G
09.04.2007, 19:16
Dann wird das Poti defekt sein, mit einem Ohmmeter die beiden äusseren Beine messen, das sollten 47k sein. Wenn das Pot OK ist dann mal von GND Nach PortC0 messen, wenn da ein sehr kleiner Widerstand ist ..........

vashan
09.04.2007, 19:28
hi, danke für deine schnelle antwort!

als ich die beiden außen gemessen habe, bekam ich 47kOhm.
die messung gnd nach portc0 ergab einen sehr hohen widerstandswert. (stand ne 1).
von Low auf dem Testboard zu dem Pin von meiner Platine ca 20K.. je nachdem wie ich an dem Poti drehe.
Ist es nun doch nicht defekt?....

Hubert.G
09.04.2007, 19:52
Und du hast sicher +5V an einem Bein des Pot, messe einmal von einem Bein des Pot auf das mittlere Bein und drehe auf beide Seiten endausschlag, dann musst du einmal 0 Ohm und einmal 47k haben, von beiden Seiten zur Mitte probieren.

vashan
09.04.2007, 20:11
jo, geht von beiden seiten zur Mitte, 0 - 47K. .........

achja ich hab vorhin wohl falsch gemessen. es sind 5v die anliegen an portc0 aber naja macht nicht viel unterschied , denn ein drehen des potis ändert da garnichts dran???

Hubert.G
09.04.2007, 20:41
Dann fehlt dir GND auf der anderen Seite des Pot, das ist notwendig entgegen der Meinung deines Freundes.

vashan
09.04.2007, 20:46
Gut zu wissen^^
Ich habs aber noch dran, also das Poti ist derzeit an Gnd angeschlossen. :-/

Hubert.G
09.04.2007, 20:54
Wenn du mit Spannung von GND auf die Mitte des Pot misst und das Pot etwa in Mittelstellung ist, sollten dort ca. 2,5V sein. Miss am besten direkt am Pot.

vashan
09.04.2007, 21:02
es bleiben immer ~ ca 5V.... das kann doch nich sein...

argh, schon wieder ein Lötfehler? ich hab dir mal ein Bild von meinem angeschlossenen Poti per PN geschickt. Vielleicht schwer zu erkennen, aber es ist doch schon so richtig angeklemmt?

Hubert.G
09.04.2007, 21:52
Eigentlich wäre es richtig, aber schon etwas schwer die Details zu erkennen.

vashan
09.04.2007, 21:54
ich werd das poti mal wieder rauslöten und schaun ob da irgendwo eine Verbindung zum mittleren Pin gibt. weil da kann ja normalerweise keine +5V anliegen. brb ^^

vashan
09.04.2007, 22:13
Bei der Messung vorhin hab ich festgestellt, dass nichts an den mittleren Pin direkt angeschlossen ist, außer vielleicht ein anderer Pin von PORTC, wo aber kein +5V sein sollte. ...

Was bleibt mir denn noch übrig, laut Widerstandsmessung funktioniert das Poti einwandfrei. 0-47k lässt es sich regeln. ....

Wenns nicht am angeschlossenen Poti liegt, vielleicht an der Leiterbahn, aber das habe ich ja grade nachgemessen. Alles ok.

Naja ich bedanke mich für die freundliche(+kompetente) Hilfe. hab leider nur noch ein paar Tage für dieses kleine Projekt.
Falls noch jemand eine Idee hat, wie ich das Problem beheben könnte, immer nur her damit :)

Gruß Vashan

Hubert.G
10.04.2007, 22:30
Ich habe mir gerade das Bild angesehen, trenne die Verbindung vom mittleren Pin den Pot zum PortC5 auf, dann ist dein Problem fast sicher behoben.
Hubert

vashan
11.04.2007, 18:43
okay, habe die Verbindung dazwischen getrennt.

Habe noch einen wohl wichtigen Fehler gefunden:
http://img440.imageshack.us/img440/2627/schnittstellendatenlc1.th.jpg (http://img440.imageshack.us/my.php?image=schnittstellendatenlc1.jpg)
High und Low sind nicht die beiden äußeren Pins. Ich habe das jetzt umgelötet. Die Spannung bei dem mittleren Pin des Potis ändert sich endlich! :)
Jedoch scheint das dem PortC0 (mein Analog-Eingang) nicht zu kümmern :-/ ???

Gruß Vashan

Hubert.G
11.04.2007, 19:43
Ändert sich auch die Spannung am PortC0? Wenn sie das tut, dann hast du ein SW-Problem, es sei denn du hast deinen µC gemeuchelt, was aber kaum der Fall sein dürfte da du hoffentlich nie mehr als +5V anliegen hattest. Es dürfen von den restlichen PortC Pin keine Verbindungen zum Pot bestehen.
Hubert

vashan
13.04.2007, 17:42
hi!

Also ich hab jetzt wohl mein Poti kaputt gelötet. Ich werd es sofort ausprobieren, wenn mein neues angekommen ist. Ich hoffe ja, das es dann endlich funktioniert ](*,)

Gruß Vashan

vashan
18.04.2007, 21:24
hi nochmals! Also, nachdem mein neues Poti endlich angekommen ist und ich es eingelötet hab (und dieses Mal nicht + und - da gesucht wo es nicht ist -_-)
funktioniert es endlich so wie es das auch soll :D (naja, was solls. Eine Erfahrung reicher...):Haue :Haue

Danke für die Hilfe! :mrgreen: