PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATMega32 ADC



Che Guevara
11.05.2009, 22:06
Hallo Leute,

für einen kleinen Robi mit 2 gehackten Servos und einem Sharp GP2D12 möchte ich mit dem µC (AVR 32) den Sharp auslesen, allerdings funzt das anscheinend nicht...

hier meine Beschaltung:

reset --> 10k --> VCC (5V)
VCC --> VCC
GND --> GND
und zwischen VCC und GND einen 100nF

AREF --> 100nF --> GND
AVCC --> VCC
AGND --> GND

natürlich ist die gesamte Bordspannung mehrfach gesiebt und gleichgerichtet und... na, ihr wisst schon ;-)

Hier mal mein Programm:



$regfile = "m32def.dat"
$crystal = 8000000


Declare Function Gp2() As Single

Config Portb.1 = Output
Config Portb.2 = Output

Config Servos = 2 , Servo1 = Portb.1 , Servo2 = Portb.2 , Reload = 10


Config Adc = Single , Prescaler = Auto
Start Adc

Config Pina.0 = Input
Porta.0 = 0


Dim D As Single
Dim X As Word
Dim Volt As Single
Dim Ent As Single

Const A = 24.93
Const B = 0.0695
Const Ref = 5 / 1023

Enable Interrupts

Ent = 0


Servo(1) = 150
Servo(2) = 50


Do

Ent = Gp2()

If Ent < 40 Then
Servo(1) = 50
Servo(2) = 150
Wait 2
Servo(1) = 150
Servo(2) = 150
End If

Loop

End

Function Gp2() As Single
X = Getadc(0)
If X >= 77 And X <= 650 Then
Volt = X * Ref
D = Volt - B
Gp2 = A / D
End If
End Function


Fuses sind auch richtig, INT. Oszi 8MHz, JTAG disabled...
sind sonst noch i-welche fuses interressant???
Komisch ist, dass wenn ich den Chip ins RN-Control setzte und mir ent über rs232 ausgeben lasse, das ganze funzt?!?!?!?
liegt es vielleicht an der fehlenden induktivität an aref?? meiner meinung nach ist diese nur zum entstören da?!

danke für eure antworten
gruß
chris

Besserwessi
11.05.2009, 22:33
Die induktivität ist zur zusätzlichenentstärung von AVCC. Das ist vor allem wichtig wenn man die volle Auflösung des ADCs braucht und an Vcc noch was dran hängt das stört, so wie z.B. ein Motor oder ein externer Quarzoszillator. Ohne Induktivität hat man eventuell etwas mehr rauschen (oder eigentlich Störungen) auf den AD Eingängen. Das Programm sollte aber trotzdem laufen.
Eher könnte der fehlende 2 te Entstörkondensator stören, ist aber auch eher die Ausnahme.

Von den Fuses könnte eventeull noch das aktivieren des Brownoutdetektors (und passende Spannung) sinnvoll sein.

Was geht denn nicht ?

Che Guevara
12.05.2009, 14:50
Hallo Besserwessi,

Also ist die Induktivität nur für bessere genauigkeit??
Das ist dann ja egal, weil ich sowieso nicht zwischen ADC = 600 und ADC = 610 in der Entfernung unterscheiden kann / muss....

Habe jetzt mal die Fuses, die ich glaube wichtig zu sein, markiert und als screenshot beigefügt....

"Was geht denn nicht ?"

Im prinzip alles, bis auf die ADC auswertung...
Der robi fährt ganz normal geradeaus, dann sollte er, wenn er etwas detektiert, unter einem bestimmten abstand, ausweichen... allerdings passiert das nicht?!?!
Auf dem RN-Control mit dem gleichen µC funktionierts! hab mir schon mal den ADC über RS232 am PC anzeigen lassen, das funzt einwandfrei!!

Habe ich vielleicht irgendeinen Fehler in der Hardware / kann das der Grund sein??

Gruß
Chris