-         

Ergebnis 1 bis 3 von 3

Thema: ATMega32 ADC

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544

    ATMega32 ADC

    Anzeige

    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:

    Code:
    $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

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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 ?

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken fuses_207.jpg  

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •