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
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ß
> Ist Idiotensicher.
Die Foren auf dieser WebSite beweisen das Gegenteil :-)
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.