Steppender Linienfolger - SW soll HW Ressourcen frei machen
von
am 25.10.2015 um 15:08 (1942 Hits)
Stöhn. Ich schaffe es nicht, meinen Linienfolger mit gegenwärtigem Liniensensor einen 90° Knick ohne Tricks fahren zu lassen. Schneide ich von dem Linienknick außen ein kleine Ecke weg, klappt es. Ich möchte aber, daß er auch ohne Streckenmanipulation die, ja noch nicht einmal Hürde schafft.
Dazu, dachte ich, löte ich einfach noch eine CNY70 Reflexlichtschranke irgendwo dran. Die soll merken, wenn keine Linie mehr da ist. Das dann auch noch zu modifizierende Fahrprogramm soll dann nach ihr suchen.
Allerdings werden mir die freien Prozessorpins schon wieder knapp. Funktionsmäßig gehört der CNY ja an den Liniensensortiny, an dem im Augenblick nur noch der Reset Pin frei ist. Also was jetzt? Lötkolben erstmal wieder ausgeschaltet und nach Anschlußmöglichkeit gesucht.
Drei Pins werden allein für die serielle Datenübertragung per Zwangslaufverfahren zum Hauptprozessor verbraten. Bevor ich da einen ATTiny24 einbaue, der auch die differentielle Messung kann und ein paar Pins mehr hat, versuche ich mal noch eine der drei Leitungen einzusparen. Günstiger Effekt: Nicht nur am Tiny sondern auch am ATMega88A würde ein Pin frei. Könnte auch für den RC5-Tiny benutzt werden - nochmal zwei Pins frei.
Gibt es bisher drei Leitungen, die Datenleitung vom Tiny zum Mega, die Signalleitung vom Mega zum Tiny und die Signalleitung vom Tiny zum Mega, sollen es jetzt nur zwei Leitungen werden. Jede Leitung kann Daten- oder Signalleitung sein, abhängig vom Pegel des übertragenden Bits.
Im inaktiven Zustand sind die vier Pins, zwei auf der Tiny-Seite und zwei auf der Mega-Seite als Input mit aktiviertem Pullup konfiguriert. Die beiden Leitungen haben also einen hochohmigen HIGH Pegel.
Übertragen werden 12 Bit, 4 als Funktionsadresse und 8 Bit als Funktionswert.Code:1. Soll ein HIGH-Bit vom Tiny zum Mega übertragen werden, zieht der Tiny die Leitung 1 auf LOW. Der Mega erkennt Leitung 1 als LOW und hat damit schon ein Bit (eine "1") empfangen. 2. Als Quittung zieht der Mega die Leitung 2 auf LOW. 3. Der Tiny nimmt das Datenbit weg indem der Leitung 1 "öffnet" -> die Leitung 1 bekommt hochohmiges HIGH Potential 4. Der Mega macht daraufhin das Gleiche mit der Leitung 2 -> die Leitung 2 bekommt auch wieder hochohmiges HIGH Potential 1. Nun kann der Tiny zB ein LOW Bit anlegen. Für ein LOW Bit nimmt er nicht Leitung 1, sondern Leitung 2. Der Mega erkennt die Leitung 2 als LOW und hat damit ein LOW-Bit (eine "0") empfangen. 2. Er legt nun Leitung 1 auf LOW als Quittung 3. Tiny "öffnet" Leitung 2 usw.
Zwangslaufverfahren damit zB der Mega88 jederzeit die Übertragung unterbrechen und wieder aufnehmen kann. Es geht sehr schnell und man ist nicht zB wie beim USART auf übereinstimmenden Takt angewiesen.
Schätzungsweise geht das Zweileitungsverfahren etwas langsamer als vorher, da die Pins zusätzlich zwischen Input und Output umgeschaltet werden müssen.
Vielleicht gibt es schon so eine Übertragung - egal es macht Spaß so etwas auszutüfteln und sein eigenes Rad zu entwickeln I2C hatte ich ja schon beim reinen RC-Steppervehikel verworfen. Bei viel Zeit komme ich vielleicht nochmal drauf zurück und untersuche, ob es hier brauchbar ist.
Senderoutine in ASM ist schon fertig ... geschrieben - nicht getestet und Gegenseite kommt auch bald dran. Kann nur hoffen, daß ich da keinen fatalen Denkfehler habe. Bitte mich unbedingt drauf aufmerksam machen
Gruß
Searcher