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
  >wait_ad: > sbi ADCSRA,ADSC ;AD starten > in r19,ADCSRA > SBRS r19,4 ;auf AD warten > rjmp wait_ad Wenn Du den ADC in der Warteschleife immer wieder neu startest, dann ist es kein Wunder, dass nur Murks rauskommt...
> Kann das an der Übertragung liegen? Ich habe ein sehr > langes Kabel an der RS232 (über 15m). Möglich: Naheliegend wäre daher die Übertragung mal für sich alleine zu testen.
Danke erstmal für die schnellen Antworten!! @johnny.m Ups, dummer Fehler. Aber leider lags nicht daran. @Karl-Heinz Hab das Kabel jetzt deutlich gekürzt (1,5m) zum Testen, scheint wirklich daran zu liegen. Geht aber auch jetzt noch nicht :-/ Scheint als hätte ich da das falsche Kabel erwischt. Ich werds mal mit ner niedrigeren Baudrate probieren
ES GEHT!! Das sind so die Tücken wenn man damit nicht wirklich Erfahrung hat ;-)
Ich würds mal mit einem eigenen Testprogramm probieren, das ganz einfach alles was empfangen wird wieder zurückschickt. Oder das ganz einfach nur ein 'A' ständig auf der Seriellen sendet. Es macht wenig Sinn, mit einem Programm zu testen wenn du da drin 5 Komponenten in Verdacht hast, Mist zu bauen.
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.
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten