PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Proble mit PWM Fading über 10k Pottis



rauf81
19.09.2011, 11:30
Hallo zusammen. Wie der Titel schon sagt habe ich Probleme mit Bascom und Fading von drei PWM Kanälen.

Aufbau:
Ich habe an ADC Kanal 0/1/2 je ein Potti 10k.
Diese faden die PWM Kanäle des Timers0 / Timers1 eines Atmega 16.

Das Konkrete Problem ist das ich immer nur zwei faden kann, sobald ich den dritten fade,
Springen alle drei ADC Kanäle auf 0.
Unabhängig welche ich regele, also beide Timer1 oder je einen von Timer1 und Timer0, kommt der Dritte hinzu springt alles auf 0.
Ich höffe Ihr könnt mir weiter Helfen

Anbei das Bascom Programm.
Schaltplan






$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32

Ddrb = &HFF
Ddrd = &HFF
Ddrc = &HFF

Ddra = &H00

Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.0 , Rs = Portc.1
Config Lcd = 20 * 4

Enable Interrupts


Dim Adc_rot As Word
Dim Adc_grün As Word
Dim Adc_blau As Word

Dim Pwm_rot As Word
Dim Pwm_grün As Word
Dim Pwm_blau As Word

Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
Config Timer1 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256




Config Adc = Single , Prescaler = Auto , Reference = Avcc






Do

Waitms 250

Cls

Locate 1 , 1
Lcd "Motion Control @ RAU"

Locate 2 , 1
Lcd "ROT "

Gosub Rot_messen

Pwm_rot = Adc_rot / 4

Lcd Pwm_rot


Locate 3 , 1
Lcd "GRUEN "

Gosub Grün_messen

Pwm_grün = Adc_grün / 4

Lcd Pwm_grün



Locate 4 , 1
Lcd "BLAU "

Gosub Blau_messen

Pwm_blau = Adc_blau / 4

Lcd Pwm_blau


Ocr0 = Adc_rot
Ocr1a = Adc_grün
Ocr1b = Adc_blau

Loop

End



Rot_messen:

Start Adc
Adc_rot = Getadc(2)
Stop Adc

Return

Grün_messen:

Start Adc
Adc_grün = Getadc(1)
Stop Adc

Return

Blau_messen:

Start Adc
Adc_blau = Getadc(0)
Stop Adc

Return

20081

Grüße Flo

radbruch
19.09.2011, 11:45
Sollte der Timer1 nicht auch mit 8-Bit laufen?

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , ...

rauf81
19.09.2011, 11:54
Hallo und Danke

Absolut richtig hatte ich wohl übersehen.
Leider war das aber nicht der gesuchte Fehler.
Das Programm geht immer noch nicht :-(


Grüße Flo

radbruch
19.09.2011, 12:06
War ja eigentlich zu erwarten. Funktioniert das?


' Config Adc = Single , Prescaler = Auto , Reference = Avcc

Ocr0 = 127
Ocr1a = 127
Ocr1b = 127

Do
Loop

End


Ach, Blödsinn, der ADC funzt ja nimmer. Vielleicht solltest du die häufigen Starts/Stops weglassen und den ADC nur einmal nach dem Config starten.

rauf81
19.09.2011, 12:15
Ja. Habe mal alles abgeworfen was nicht zu der ADC erfassung und Ausgabe gehört.
Sieht so aus


$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32

Ddrb = &HFF
Ddrd = &HFF
Ddrc = &HFF

Ddra = &H00

Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.0 , Rs = Portc.1
Config Lcd = 20 * 4


Dim Adc_rot As Word
Dim Adc_grün As Word
Dim Adc_blau As Word

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc




Do



Cls

Locate 1 , 1
Lcd "Motion Control @ RAU"



Locate 2 , 1
Lcd "ROT "
Lcd Adc_rot


Locate 3 , 1
Lcd "GRUEN "
Lcd Adc_grün



Locate 4 , 1
Lcd "BLAU "
Lcd Adc_blau

Adc_rot = Getadc(2)
Adc_grün = Getadc(1)
Adc_blau = Getadc(0)

Waitms 100

Loop

End


Nachmessen mit dem Multimeter an ADC0/1/2 ergibt keine Auffälligkeit. Spannung fällt wie gewohnt von 4,8 auf 0 Volt.
Dachte erst die Schaltung würde mir die Probleme Machen.

Grüße Flo

Ceos
19.09.2011, 12:51
ähm die qualität des schaltplan ist leider miserabel, aber kann es sein, dass dein AVCC garnicht angeschlossen ist ?

rauf81
19.09.2011, 13:01
Sorry wegen dem Schaltplan ist nicht so gelungen
Aber:

Atmega 16 def.

Das war der Fehler...
Den Kolegen getauscht nun gehts :-)

Grüße

Ceos
19.09.2011, 13:03
öhm, ich meinte eigentlich die bildqualität, zu niedrige auflösung sry wollte niemand angreifen

radbruch
19.09.2011, 14:02
Atmega 16 def.Krass. Aber immerhin funktioniert mein Testaufbau:

$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 38400

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Do

Print Getadc(2) ; " " ; Getadc(7) ; " " ; Getadc(6)

Waitms 500

Loop

End

Gruß

mic

rauf81
19.09.2011, 14:54
öhm, ich meinte eigentlich die bildqualität, zu niedrige auflösung sry wollte niemand angreifen

Kein Prob hab ich auch nicht so geeint :-)
Keine Ahnung was ich mit dem gemacht hab,
Er war neu...

Grüße