Forum: Mikrocontroller und Digitale Elektronik AVR Atmega8 Auswertung des CNY70 Signals (ADC/Schmitt-Trigger)


von Anton (Gast)


Lesenswert?

Hallo,
zurzeit arbeite ich an der Odometrie meines ersten Roboters. Dies würde 
ich gerne mit Hilfe des CNY70 
(http://www.vishay.com/docs/83751/cny70.pdf) umsetzen(Als Radencoder). 
Aus vielen anderen Beiträgen konnte ich dafür einen Schaltplan finden, 
der auch funktioniert. Bei weißer Oberfläche bekomme ich Werte im 
Bereich von 4,5V und bei schwarzer Oberfläche 0,5V, also ein klarer 
Unterschied. Nun zum Problem:
Bei mir klappt leider die Auswertung bzw. die Umwandlung des analogen 
Signals in einen digitalen Signal(logical 1 oder 0) nicht. Dabei habe 
ich als erstes versucht vor dem Atmega8 einen Schmitt Trigger SN7414N 
zwischenzuschalten.
(Link zum Datenblatt des SN7414N : 
http://www.datasheetcatalog.org/datasheet2/0/0087cg24z1aerqzlpe3p0g86aj7y.pdf 
)
jedoch gibt der Schmitt trigger mir immer 4,8v raus. Die Spannung am 
Output des Schmitt triggers verändert sich nicht, wenn dich die Spannung 
am Ausgang des CNY70 sich ändert. (Sollte mir doch eigentlich einen 
klare Spannung liefern ca. 0 V oder 5V)
Angeschlossen habe ich dies laut dem Datenblatt es richtig:
 PIN7 - GND
 PIN14 - VCC
 PIN1(Input)  - vom CNY70 ausgehender output
 PIN2(Output)  - Output des Schmitt Trigger, der mir entweder 0V oder 5V 
leifern soll.
Vielleicht habe ich irgendwas wichtiges übersehen im Datenblatt, oder 
ist es falscher Schmitt Trigger IC?

Nun gut, eine weitere Möglichkeit den analogen Signal auszuwerten, ist 
ja der ADC des Atmega8.
Dabei stoß ich jedoch auch auf Probleme.
Ich habe versucht den umgewandelten Digitalen Wert(8-Bit) auf einem LCD 
anzuzeigen. Ich habe es sogar soweit geschafft, dass der digitale Wert 
mir recht vernünftig schien (bsp. bei 4,5V :239 und bei 0,5V: 20 ), 
jedoch dieser Wert nach dem ich das Programm auf Atmega8 übertragen habe 
sich nicht mehr ändern wollte. Der Wert blieb so wie er war zu dem 
Zeitpunkt wo das Programm geladen wurde.
An dem LCD sollte es eig nicht liegen, da ich mit anderen Programmen es 
auf Funktionalität bereits überprüft habe.
Könnte es an dem ADC - Interrupt liegen oder an dem Free-running Modus 
des ADC? Hier ein Programmausschnitt:
1
rjmp INIT
2
3
;Interruptvektoren
4
;...
5
rjmp complete ;ADC
6
7
INIT:
8
;Stack Iniialisierung
9
;....
10
11
;Ports initialisieren
12
sbi PORTC, PC2
13
rcall lcd_init ;Initialisierung des LCD
14
rcall lcd_home ;Cursor auf Ausgangsposition
15
16
;ADC Initialisieren
17
ldi r16, 0b01100010 ;ADC Einstellungen: Interne Referenz Avcc, linksbündig, PC2 als Input
18
out ADMUX, r16
19
ldi r16, 0b11101011
20
out ADCSRA, r16
21
sei
22
23
;Hauptprogramm
24
MAIN:
25
 rcall plcd_ubyte ; Schreibt auf dem LCD im r16 übergebene Zahl
26
 rcall lcd_home
27
rjmp MAIN
28
;Interrupt-Handler
29
complete:
30
in r16, ADCH
31
in r17, ADCL
32
reti
Sehe es leider nicht, wieso es nur das eine Mal die Spannung in einen 
digitalen Wert umgewandelt wird.
Wäre für jede Hilfe, Tip usw sehr dankbar!

P.S es ist mein erster Beitrag in dem Forum, deswegen verzeiht mir falls 
es irgendwas an der Form oder Sonstigem auszusetzen ist(unter anderem 
meine Rechtschreibung :( ).

Mfg Anton

von spess53 (Gast)


Lesenswert?

Hi

>PIN1(Input)  - vom CNY70 ausgehender output

Pull-Up-Widerstand vorhanden?

MfG Spess

von Anton (Gast)


Lesenswert?

Hi,
Ja, habe 100kOhm angeschlossen, und zwar zum Vcc
siehe: http://www.kreatives-chaos.com/artikel/liniensensor-mit-cny70
die erste Abbildung, als R2 100kOhm (hoffe du hast das gemeint..)
konnte ja schließlich unterschiedliche Werte mit einem Messgerät von 0,5 
V bis 4,5 V messen.
mfg Anton

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Anton schrieb:
> complete:
> in r16, ADCH
> in r17, ADCL
> reti

Das sieht gefährlich aus, da r16 und r17 garantiert auch in anderen 
Programmteilen verwendet werden. Nimm andere Register oder pushe die 
Register, lies die Werte, schreib sie weg und dann pop die Originalwerte 
zurück. Und mess mal an Pin2 des 7414, obs da schön zwischen 0 und 5 
Volt springt.

von spess53 (Gast)


Lesenswert?

Hi

>Ja, habe 100kOhm angeschlossen, und zwar zum Vcc
>siehe: http://www.kreatives-chaos.com/artikel/liniensenso...

Hast du wirklich einen 7414? Also keinen HC/HCT.

MfG Spess

von Anton (Gast)


Lesenswert?

Hallo,
ja es stimmt, man sollte push und pop Befehle verwenden.
Jetzt ändert sich das Ganze auf dem LCD einige Zeit lang kommen jedoch 
verschiedene Zeichen und selten Zahlen.
Hm, wie gesagt auf dem PIN 2 sollte eine änderung zwischen 0V und 5V 
sichtbar sein, jedoch bleibt es immer auf 5V(genauer 4,85V)

mfg Anton

von Anton (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Ja, habe 100kOhm angeschlossen, und zwar zum Vcc
>>siehe: http://www.kreatives-chaos.com/artikel/liniensenso...
>
> Hast du wirklich einen 7414? Also keinen HC/HCT.
>
> MfG Spess

Nein, also ich habe diesen da beim Conrad gekauft( 
http://www.conrad.de/ce/de/product/170143/IC-SN7414-DIP)
Um ehrlich zu sein, habe ich nicht darauf geschaut ob es HC/HCT ist..
Ist es sehr wichtig?

Mfg Anton

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Anton schrieb:
> Jetzt ändert sich das Ganze auf dem LCD einige Zeit lang kommen jedoch
> verschiedene Zeichen und selten Zahlen.
> Hm, wie gesagt auf dem PIN 2 sollte eine änderung zwischen 0V und 5V
> sichtbar sein, jedoch bleibt es immer auf 5V(genauer 4,85V)

Du benötigst natürlich eine Routine, die dir Bytewerte in z.B. Hexzahlen 
umwandelt. Erst dann kommt da was sinnvolles aufs Display.
Entweder hast du den ADC Eingang irgendwo versehentlich auf Ausgang 
programmiert oder der 7414 (spess, der HC geht aber auch) ist putt. 
Lötbrücke von Pin2 des '14 nach + ist ausgeschlossen?

von Anton (Gast)


Lesenswert?

Entschuldigung, müsste evtl erwähnen, dass das Unterprogramm 
"plcd_ubyte" es bereits macht.
Es gibt mir normalerweise die vorzeichenunbehaftete Zahlen im 
Zehnersystem auf dem LCD wieder. Die Zahl soll eben nur im r16 sich 
befinden.
ADC Eingang bleibt bei mir als Eingang. Da passiert nichts.

Aber das mit Lötbrücke..
Könntest du da evtl bischen genauer erläutern?
Muss da PIN2 zusätzlich an plus?
oder habe ich da was verpasst?
Bei mir(Ich besitze Experementier-Steckboard) ist am PIN2 nichts, außer 
einer Leitung zum Messgerät.

mfg Anton

von spess53 (Gast)


Lesenswert?

Hi

>Ist es sehr wichtig?

Ja. Der Typ hat einen internen Pull-Up-Widerstand von ca. 6k am Eingang. 
Und der CNY ist nicht der empfindlichste. Ich vermute, das der CNY den 
Eingang nicht runterziehen kann.

Du kannst mal probieren, den Vorwiderstand der LED zu verkleinern um 
einen Strom von ca.50mA zu erreichen (bitte nur kurzzeitig). Und dann 
den Reflektor 2mm vor den Koppler halten. Sehr gut eignet sich eine CD. 
Vielleicht tut sich etwas.

Und dann besorgst du dir einen 74HC(T)14. Deiner gehört ins Museum.

MfG Spess

von Anton (Gast)


Lesenswert?

Ok
Vielen Dank!
werde mich auf den Weg machen zum Conrad.
Ist sonst noch irgendwas zu beachten?
Unterschied zwischen HC und HCT?
Dieser sollte passen: 
http://www.conrad.de/ce/de/product/150185/CMOS-IC-74HCT14-DIP/SHOP_AREA_17311&promotionareaSearchDetail=005 
?
mfg Anton

von spess53 (Gast)


Lesenswert?

Hi

>Unterschied zwischen HC und HCT?

Ist im Prinzip egal. Der HC hat einen weiteren Betriebsspannungsbereich.

MfG Spess

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Anton schrieb:
> Es gibt mir normalerweise die vorzeichenunbehaftete Zahlen im
> Zehnersystem auf dem LCD wieder.

Diese Routine solltest du erstmal mit verschiedenen, auch extremen Werte 
testen. So langsam sollten wir übrigens mal dein komplettes Programm zu 
sehen bekommen. Wenn überhaupt, nimm den 74HC14, der HCT hat 
Eigenheiten, die du hier nicht brauchst.
Übrigens sind AVR Eingänge recht gute Schmitt-Trigger, du könntest dir 
den Krams vermutlich sparen. Da du dazu noch auf den ADC setzt, ist der 
Schmitt-Trigger wirklich überflüssig. Nur der Eingangswiderstand der 
AVRs ist recht klein, du solltest also den Pullup aus dem ersten Posting 
auf ca. 10k-22k reduzieren und dann direkt auf den ADC gehen.

von Anton (Gast)


Lesenswert?

Ich habe mir nun 74HCT14 gekauft und ausprobiert.
Es funktioniert alles prima. Der Pegel ist eindeutig bei 5V oder 0V.
Diesen Signal kann ich nun mit Hilfe von INT0 bzw. IN1 Pins auswerten.
Jedoch noch eine kurze Frage:
Bei der Auswertung kommen bei mir mal 3, mal 1, mal 2 Signale 
(Interrupts).
Normalerweise sollte es bei Wechsel immer nur 1 Interrupt kommen.
Wie kann man das Problem lösen?
Wovon ist es abhängig?

mfg Anton

von Simon M. (edimahler)


Lesenswert?

Anton schrieb:
> Bei der Auswertung kommen bei mir mal 3, mal 1, mal 2 Signale
> (Interrupts).

Wichtig: Hast Du die nicht verwendeten Eingänge des 74HC14 auf Masse 
gelegt? Ansonsten kann es vorkommen, dass der Chip in Schwingungen 
gerät.

Auch wichtig: Zwischen Vcc und GND des 74HC14 ebenfalls einen 
Kondensator von 100nF vorsehen! Die nicht verwendeten Ausgänge kannst Du 
übrigens einfach offen lassen.

Weiter könnte es sein, dass Dein Signal verrauscht ist. Versuche doch 
einmal einen Widerstand von ca. 1kOhm in Serie mit nachgeschaltetem 
Kondensator (ca. 100nF - 1uF) gegen Masse zu schalten. Dein Signal des 
Sensor greifst Du dann zwischen R und C ab.

Aber nun mal eine weitere Frage: Weshalb verwendest Du nicht einfach den 
im uC integrierten Analog Comparator? Würde ich Dir sehr empfehlen. Dann 
kannst Du Dir den 74HC14 einsparen und kannst den ADC für andere Sachen 
sparen. Wenn es Dir nur ums digitale Signal geht ist der ADC Overkill. 
Zudem ist der Analog Comparator (abgekürzt AC) auch viel einfacher 
einzustellen und zu handeln als der ADC. Und auch der AC hat einen 
eigenen Interrupt...

Grüsse und viel Glück
Simon

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
Noch kein Account? Hier anmelden.