-         

Ergebnis 1 bis 7 von 7

Thema: Suche Hilfe bei kleinem Projekt: ADC mit ATMEGA8 in Assembler

  1. #1

    Suche Hilfe bei kleinem Projekt: ADC mit ATMEGA8 in Assembler

    Anzeige

    Hallo,

    ich Suche Unterstützung/Hilfe bei der Programmierung eines ATMEGA8. Genau geht es um die Programmierung
    eines ADC Einganges am ATMEGA8.

    Es gibt keine besonderen Anforderungen. Eingang 0 bis 5 V, Auflösung 8, besser 10 bit.
    Es soll etwa 3 mal gemessen werden und dann der Mittelwert gebildet werden.
    Der Meßzyklus soll aller 2 sec stattfinden. Alles zeitunkritisch.

    Das Ergebnis wird dann mit einem Min-und Max Wert verglichen-und dann im Ergebnis des Vergleiches
    Portpins gesetzt. (kann später besprochen werden).

    Wer würde sich bereit erklären, mir dabei zu helfen. Ich habe schon mit Assembler programmiert, aber infolge
    anderer Aufgaben konnte ich mich noch nicht in der ADC-Sache einarbeiten, außerdem wird die
    Zeit knapp.

    Über finanziellen Ausgleich etc. müssen wir dann reden.

    Viele Grüße
    leoner

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Warum muss es Assembler sein?
    Grüße
    Thomas

  3. #3
    Hallo Thomas,

    gute Frage.

    nun, das Projekt ist bereits aufgebaut und im Einsatz (Test).

    Ich habe es in Assembler geschrieben, so gut ich es eben konnte. Dabei habe ich die ADC-Sache testweise durch
    einen Komparator hardewareseitig ersetzt. Das soll nun in der Finalvariante wegfallen.

    Außerdem wäre es auch ein kleiner Lerneffekt für mich, schließlich kann es zu einem späteren Zeitpunkt zu Änderungen kommen,
    die ich dann selbst erledigen könnte.

    Ich weiß, in C dürfte es wesentlich besser zu programmieren sein.

    Grüße
    leoner

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von leoner Beitrag anzeigen
    Ich weiß, in C dürfte es wesentlich besser zu programmieren sein.
    Bei Bascom hätt ich helfen können...
    Grüße
    Thomas

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Es sind 4 Messungen, da man dann keine Divisionsroutine benötigt, sondern nur zweimal rechts schieben muss.
    Den Rest solltest Du selbst zusammenbringen.
    Code:
    .include "m8def.inc"
    
    .equ    chan    = 0    ; adc-channel
    
    .cseg
    .org 0
        rjmp       start
        reti
    
    .org 0x13
    start:
        ldi        r16,        high(RAMEND)
        out        SPH,        r16
        ldi        r16,        low(RAMEND)
        out        SPL,        r16
        rcall      adc_init
    
    mainloop:
    
        rcall      get_adc
        ; do something
    rjmp mainloop
    
    get_adc:                                   ; returns averaged result out of 4 samples
        clr        r18                         ; result in r18/r19
        clr        r19
        ldi        r17,        4               ; count of samples
        in         r16,        ADMUX
        andi       r16,        ~(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0)
        ori        r16,        chan
        out        ADMUX,      r16
    get_sample:
        sbi        ADCSRA,     ADSC            ; start conversion
    wait_adc:
        sbic       ADCSRA,     ADSC
        rjmp       wait_adc                    ; wait for conversion ready
        in         r16,        ADCL            ; get result low byte
        add        r18,        r16             ; add
        in         r16,        ADCH            ; get high byte
        adc        r19,        r16             ; add with carry
        dec        r17                         ; decrease sample counter
        brne       get_sample    
        lsr        r19                         ; shift result right = divide by 2
        ror        r18
        lsr        r19                         ; same again, now divided by 4
        ror        r18
    ret
    
    adc_init:
        ldi        r16,        (1<<ADEN)|(1<<ADPS2)|(1<<ADPS0)      ; enable adc, adc-prescaler 32
        out        ADCSRA,     r16
        ldi        r16,        (1<<REFS0)                           ; ref is AVCC
        out        ADMUX,      r16
    ret
    Geändert von MagicWSmoke (01.09.2012 um 22:34 Uhr)

  6. #6
    Hallo MagicWSmoke,

    danke für den Code. Muss mich da aber erst mal reindenken. Aber die Ergebnisse im Reg. R18/19 müssen ja auch
    ausgewertet werden. Das nächste Problem (für mich). Und in der knappen zur Verfügung stehenden Zeit wird das für mich
    zu eng und letztendlich auch zu unsicher.

    Also noch mal meine Bitte:

    Wer kann dies programmieren? Genaue Details (Auswertung der Register etc.) müssen dann am besten per tel. Kontakt
    ausgetauscht werden.

    Grüße
    leoner

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von leoner Beitrag anzeigen
    danke für den Code.
    Bitte.
    Aber die Ergebnisse im Reg. R18/19 müssen ja auch ausgewertet werden.
    Macht man mit CPI/CPC.
    Und in der knappen zur Verfügung stehenden Zeit wird das für mich zu eng
    Die Hoffnung auf und Suche nach Jemanden der's Dir schreibt, wird Dich auch Zeit kosten.

Ähnliche Themen

  1. Suche hilfe für ein C Programm atmega8
    Von tiscali im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 17.12.2007, 16:14
  2. Suche "E-Mail Hilfe" für Tauchroboter Projekt
    Von Jig im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 14.11.2007, 02:14
  3. TRANSISTORTESTER ATmega8 (Assembler)
    Von Bernhard.Erfurt im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 53
    Letzter Beitrag: 18.04.2007, 23:14
  4. Schrittmotor mit ATmega8 und Assembler
    Von MischaMV im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 29.06.2005, 11:46
  5. ADC + Atmega8 + Assembler
    Von higret im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 12.06.2005, 13:17

Berechtigungen

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