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.