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:
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
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
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.
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
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?
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
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
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.
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
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