-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: AtMega8 Analogen Eingang auslesen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.04.2005
    Ort
    Blender
    Beiträge
    36

    AtMega8 Analogen Eingang auslesen

    Anzeige



    Ich würde gerne den analogen Wert auslesen, der an den Ports Pc.0 Pc.1
    anliegt.

    An den Ports sollten je nach potie stellung zwischen 0 und 150 k ohm anliegen.

    Wie muss ich den Port configurieren ?
    Und wie dann auslesen?

    ----
    2 Frage:
    Wieso kann ich die Zahl 4.3 nich in eine Variable die als Single deklariert ist schreiben ? Was muss ich nehmen, damit es geht ?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    An den Ports sollten je nach potie stellung zwischen 0 und 150 k ohm anliegen.
    nur spannung liegt an! und der strom fließt... aber was der widerstand macht ist mir nicht geläufig...


    zeichne mal ein wie du dir das mit dem poti gedacht hast...

    generell kann man mit dem adc nur spannungen messen! du müsstest also dein poti als spannungsteiler von 5V nach masse schalten und den schleifer an den AVR anschließen...

    zum programm: such in der Bascom hilfe man nach config adc und getadc...

    2.frage: das sollte normalerweise funktioneiren, und bei mir meckert der compiler auch nicht...
    Code:
    Dim A As Single
    A = 4.3

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.04.2005
    Ort
    Blender
    Beiträge
    36
    zu2:

    Code:
    $crystal = 4000000
    Config Portb = Output
    Config Portc = Input
    Config Portd = Output
    
    Dim A As Single
    
    A = 3.1 '[etwas gerades geht auch nicht mehr - in der schule gings, aber kriege es gerad nicht mehr hin... :( ]
    
    Do
    
    Portd.0 = 1
    Portd.1 = 0
    Portd.2 = 1
    Portd.3 = 0
    
    Portb.0 = 1
    Portb.1 = 0
    Portd.2 = 1
    Portd.3 = 0
    
    Waitms A
    
    Portd.0 = 1
    Portd.1 = 0
    Portd.2 = 0
    Portd.3 = 1
    
    Portb.0 = 1
    Portb.1 = 0
    Portb.2 = 0
    Portb.3 = 1
    
    Waitms A
    
    Portd.0 = 0
    Portd.1 = 1
    Portd.2 = 0
    Portd.3 = 1
    
    Portb.0 = 0
    Portb.1 = 1
    Portb.2 = 0
    Portb.3 = 1
    
    Waitms A
    
    Portd.0 = 1
    Portd.1 = 1
    Portd.2 = 1
    Portd.3 = 0
    
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 0
    
    Waitms A
    
    Loop

    ^^^
    nur leider dreht sich der motor dann nicht

    wenn man A durch 3.3 oder sowas ersetzt dreht er sich...
    also irgendwie funktioniert das nicht
    was mach ich falsch?

    zu 1

    http://www.bildfaenger-film.de/extern/voll.jpg

    Bitte keine Bilder mit mehr als 640 Pixel direkt einbinden da Forumstruktur sonst verschoben wird! Habe es mal geändert.
    Webmaster Frank

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    19.04.2005
    Ort
    Blender
    Beiträge
    36
    ach kommt schon.. was mache ich bei 2) falsch

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Zitat Zitat von gRaf-eny
    ach kommt schon.. was mache ich bei 2) falsch
    komme schon...
    aber was hängt nun eigentlich an den ports dran die du so hektisch hin und her schaltest? ein motortreiber?

    kompiliert wird das ganze bei mir einwandfrei... bei dir auch? also nur keine reaktion darauf, oder ne fehlermeldung vom compiler?

    wenn du den motor in verschieden richtungen drehen lassen willst sind die drei MILIsekunden wahrscheionlich etwas wenig... da kommt kein motor hinterher... drei sekunden, also waitms 3000, wäre wohl eher angebracht... oder soll das nen selbstgestrickter pwm werden?


    edit: ich hab mal den simulator drüberlaufen lassen. ein waitms 3 läuft in deri milisekunden durch, aber bei waitms A hängt er sich weg...

    nun habe ich A mal als integer deklariert: und schupps, schon läuft die kiste... die waitms funktion scheint nur ganzzahlen zu nehmen... genauer gesagt nen word, aber nen positiver integer geht auch...

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    19.04.2005
    Ort
    Blender
    Beiträge
    36
    ok danke!
    mit integer geht es!

    Was ich machen möchte?
    Mit der X und Y achse eines gameport joysticks 2 Schrittmotoren steuen,
    das ganze soll ein kameraschwenkkopf werden

    im prinzip muss ich jetzt ja nur noch die stellung der poties auslesen,
    dann den wert mit ner formel auf einen wert zwischen 1 und 10 bringen und diesen dann in der waitms funktion verwenden

    Aber das auslesen schnall ich noch nicht ganz...

    Code:
    $crystal = 6000000
                                          '
    Config Portb = Output                                       '
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
    Config Lcd = 16 * 2
    Config Adc = Single , Prescaler = Auto
    
    Dim Wert1 As Integer
    Dim Wert2 As Integer
    
    '1023 ganz Vorne
    '520
    '363
    
    Do
    
    Cls
    Start Adc
    Wert1 = Getadc(0 , 1)
    Start Adc
    Wert2 = Getadc(1 , 1)
    
    Lcd Wert2
    Lowerline
    
    Lcd Wert2
    
    Waitms 10
    
    Loop
    das geht jetzt zwar schon, aber irgenwie steht da 2 mal das gleiche... warum ??? ist nur die x achse nicht die y achse ?

    programmier fehler ? oder karten fehler ?

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.02.2005
    Ort
    Wels
    Alter
    55
    Beiträge
    512
    Zitat Zitat von gRaf-eny
    .....das ganze soll ein kameraschwenkkopf werden
    hrhr, zwei deppen, eine meinung :B

    ok, ich verfolge deine posts und du meine und dann treffen wir uns auf ein paar bierchen *bfg*

    mfg knacki

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    19.04.2005
    Ort
    Blender
    Beiträge
    36
    also links rechts testweise in 2 geschwindigkeiten geht schon...
    aber hoch runter kann ich nich auslesen...

    Wert1 = Getadc(0 , 1)
    da mach ich was falsch

    und

    Wert1 = Getadc(0 , 1) = Wert1 = Getadc(1 , 0)

    das ^^^kann doch auch nich sein ? ! - is aber so..

    kann mir das bitte noch wer erklären ?

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    19.04.2005
    Ort
    Blender
    Beiträge
    36
    von euch scheint keiner den analogen eingang gut zu kennen, oder?
    hab das problem immernoch

    links recht geht super! jetzt richtig stufenlos !
    aber hoch runter den port kann ich irgenwie nicht auslesen
    (wäre portc.1 - adc1)

    postet bitte eure ideen wieso das nicht geht!

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Wert1 = Getadc(0 , 1)
    da mach ich was falsch
    stimmt! in der klammer darf natürlich nur eine kanalnummer stehen!
    und denk dran: die zählung der ad-kanäle fängt bei null an!
    also einmal
    x = getadc(0)
    und dann
    y= getadc(1)


    und hast du schonmal sichergestellt dass die hardware überhaupt richtig läuft? also am eingang des megas mal die spannung messen und dabei am joystick rumbiegen...

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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