Gast
#353116
Moin!
Ich baue für meine Studienarbeit eine Feldmühle. Diese misst das
elektrostatische Feld. Ziel ist die Messdaten im Internet
darszustellen. Zur Kommunikation mit dem PC verwende ich einen
ATmega8.
An Port C0 liegt der Messwert als Gleichspannung an, wird digitalisiert
und über RS232 an den PC gesendet (8Bit-Wert).
Das Problem ist dass ich auf dem PC nicht die gewünschten Werte
empfange. Es werden zwar Daten gesendet, aber die stimmen definitiv
nicht. Wenn ich Port C0 auf Masse lege,sendet er mir durchgehend "00"
zurück, soweit gehts. Lege ich dann eine Spannung (aus einem
DC-Netzteil, zum testen) an, 3,6V, bekomme ich ungefähr diese
Ergebnisse:
00
00
00
02
FF
01
FF
00
02
FF
00
00
00
02
FF
...
Also so gut wie nicht und ab-und-zu mal ein FF... ab zwischendrin immer
sehr viele 00er :-/
Kann das an der Übertragung liegen? Ich habe ein sehr langes Kabel an
der RS232 (über 15m). Oder ein Fehler im Code?
Ich hoffe ihr könnte mir einen Tipp geben woran es liegt! Wenn Fragen
zum Aufbau sind, nur zu ;-)
Hier noch der Code:
(...)
ldi r16,0b00000000 ;Port C als Eingang
out ddrc,r16 ;setzen
ldi r16,0b00000000 ;Port C Pull-Up deaktivieren
out portc,r16 ;setzen
ldi r16,0b00100000 ;AVref, links ausger., C0 als Input
out admux,r16
ldi r16,0b11000111 ;ADC enable, Single Mode, Taktt. 128
out adcsra,r16 ;Interrupt disabled, Frequenzt. 2
(...)
loop:
;Die Hauptschleife wird immer wieder durchlaufen.
;Bei jedem Durchlauf wird der AD gestartet und dann der Wert gesendet
ldi temp, HIGH(0x0) ;load start value
out TCNT1H, temp
ldi temp, LOW(0x0)
out TCNT1L, temp
IN r19,TIFR ;Timer Overflow Flag löschen
OUT TIFR,R19
[Warteschleife damit nicht zu viele Daten gesendet werden]
wait_ad:
sbi ADCSRA,ADSC ;AD starten
in r19,ADCSRA
SBRS r19,4 ;auf AD warten
rjmp wait_ad
in temp,ADCH ;Wert in Register laden
rcall sendbyte ;Wert senden
rjmp loop ;Neuer Durchgang