www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Suche SW üfr RS232 Ausgabe des ADC-Wertes


Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich bin wie so viele ein Newby,
bin auf der Suche einer Software, die mir (so simpel wie das auch 
klingt) einen ADC eines ATMega16 (ist auf STK500 montiert) auf einRS232 
(1N8,9600)gibt.
Ich scheitere ein bisschen, da Tutorials mir immer nur Bruchstücken 
geben, uns mit der GCC dann mit intresanten Fehlermeldungen das Leben 
versauert.
eventuell hat da jemand was in C,

das man mal probieren könnte.

 Wäre euch sehr Dankbar.

Rudi

Autor: akw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn mir viele dafür jetzt den Kopf abreißen werden: Benutz wenn du 
schnell das Programm brauchst einfach Bascom o.ä. Ist Idiotensicher.

Sieht dann in etwa nur so aus

do
x = getadc(0)
send x
loop

Geht für Anfäger echt fix und ohne viele Probleme.

gruß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist Idiotensicher.

Die Foren auf dieser WebSite beweisen das Gegenteil :-)

Autor: Björn Wieck (bwieck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Untenstehendes sollte das tun was du wolltest...
Das hättest du auch trotz newbietums dir auch selber zusammensuchen 
können.
Das ganze Konstrukt besteht eigentlich nur aus Codeteilen die hier in 
den Foren schonmal veröffentlicht wurden...

Grüße
Björn



.include "m16def.inc"  ;Definitionen für AtMega16
.def temp1 = r16
.def temp2 = r17
.def temp3 = r18
.def temp4 = r19
.def adlow = r20
.def adhigh = r21
.def temp5 = r22
.def temp6 = r23
.def temp7 = r24
.def temp8 = r25
.equ quartz = 3686400   ;für Standard STK500
.equ baud = 9600   ;Baudrate


;UART Initalisierung

  sbi UCSRB, TXEN   ; enable transmit
  ldi temp1, quartz / (baud * 16) - 1
  out UBRRL, temp1    ; BAUD Rate

; ADC initialisieren mit "Free Run" und Vorteiler 128
  ldi temp1, 0   ; Kanal 0
  out ADMUX, temp1
  ldi temp1, ((1<<ADEN)|(1<<ADSC)|(1<<ADFR)) + 7
  out ADCSR, temp1


Main:

; neuen ADC-Wert lesen  (Schleife - 256 mal)

SER_SCHLEIFE:
      sbi ADCSRA, ADIF  ; logisch "1" lscht ADIF flag !
SER_SCHLEIFE_w:
      sbis ADCSR, ADIF ; warten bis ADIF flag gesetzt
      rjmp SER_SCHLEIFE_w



; ADC einlesen:
      in  adlow, ADCL ; immer zuerst LOW Byte lesen
      in  adhigh, ADCH ; danach das mittlerweile gesperrte High Byte


; alle 256 ADC-Werte addieren
      add temp2,adlow       ; addieren
      adc temp3,adhigh      ; addieren über Carry
      adc temp4,temp1       ; addieren über Carry
      dec temp5        ; Schleifenzhler MINUS 1
      brne SER_SCHLEIFE     ; ==> SCHLEIFE



; MITTELWERT-BERECHNUNG  (Prüfung der "Kommastelle" temp2)
      cpi temp2,128     ; "Kommastelle" kleiner als 128 ?
      brlo SER_MITTELWERT_w ; ist kleiner ==> Sprung

; Aufrunden
    ldi adlow,1     ; =1
    add temp3,adlow     ; addieren von 1
    adc temp4,temp1     ; addieren ber Carry
SER_MITTELWERT_w:
;   Ergebnis nach adlow und adhigh kopieren
    mov adlow,temp3
    mov adhigh,temp4


;in ASCII umwandeln

    ldi  temp5, -1 + '0'
_a6ser:    inc  temp5
    subi  adlow, low(10000)  ;-10,000
    sbci  adhigh, high(10000)
    brcc  _a6ser

    ldi  temp6, 10 + '0'
_a7ser:    dec  temp6
    subi  adlow, low(-1000)  ;+1000
    sbci  adhigh, high(-1000)
    brcs  _a7ser

    ldi  temp7, -1 + '0'
_a8ser:    inc  temp7
    subi  adlow, low(100)    ;-100
    sbci  adhigh, high(100)
    brcc  _a8ser

    ldi  temp8, 10 + '0'
_a9ser:    dec  temp8
    subi  adlow, -10    ;+10
    brcs  _a9ser
    subi adlow,-'0'

;an UART Senden

    mov temp1, temp5
    rcall transmit
    mov temp1, temp6
    rcall transmit
    mov temp1, temp7
    rcall transmit
    mov temp1, temp8
    rcall transmit
    mov temp1, adlow
    rcall transmit
    ldi temp1,13  ;CR
    rcall transmit
    ldi temp1,10  ;LF
    rcall transmit
    rjmp Main




transmit:
      sbis UCSRA,UDRE   ; Warten, bis UDR bereit ist
    rjmp transmit
    out UDR, temp1
    ret

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.