mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR A/D-Wandler wandelt nur sporadisch um?!


Autor: Jan Petersen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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...

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Jan Petersen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jan Petersen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ES GEHT!!
Das sind so die Tücken wenn man damit nicht wirklich Erfahrung hat ;-)

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

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.