- LiFePO4 Speicher Test         
Ergebnis 1 bis 7 von 7

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

Hybrid-Darstellung

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

  2. #2
    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

  3. #3
    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

  4. #4
    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 21:34 Uhr)

  5. #5
    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

  6. #6
    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, 15: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, 01:14
  3. TRANSISTORTESTER ATmega8 (Assembler)
    Von Bernhard.Erfurt im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 53
    Letzter Beitrag: 18.04.2007, 22:14
  4. Schrittmotor mit ATmega8 und Assembler
    Von MischaMV im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 29.06.2005, 10:46
  5. ADC + Atmega8 + Assembler
    Von higret im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 12.06.2005, 12:17

Berechtigungen

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

LiFePO4 Speicher Test