Ich habe eine Auslesemimik für die chinesischen Meßschieber: <A HREF="http://www.shumatech.com/support/chinese_scales.htm"> Chinese Scales </A> unter Benutzung des avr-gcc zusammen mit einer 7 Seg Multiplexanzeige in einen ATTiny2313 gehäckselt. Die Multiplexanzeige benutzt 2 74HC164, die Daten werden über die USI (Mistding) rausgeschoben. Die Lesemimik orientiert sich an dem PIC Code von "Finger's Welt", gefällt mir aber überhaupt nicht. Im Prinzip werden da ständig ein Pin gepollt (Clockpin) und dann mit verbotenen Interrupts bei jeder L/H Transition die daten in einen 48 Byte Speicher eingelesen, wobei im Prinzip nur ein Bit jedes Byte benutzt wird. Dieser Mist deswegen, weil der Clock 90Khz betragen kann, das sind gerade mal 11 µsek zwischen den zu sampelnden Datenbits. der Tiny2313 läuft zwar mit 20Mhz, aber ich habe nicht das Gefühl, das eine Pin-change ISR es schaffen würde, die Daten einzusortieren. Hat hier Jemand eine Idee, wie man das am elegantesten bewerkstelligen könnte? Ich hätte da ja auch noch vor, einen 2. Meßschieber dessen Clock natürlich völlig asynchron zum ersten liegt auch noch auszulesen und die Daten anzuzeigen. (X/Y an einer Drehbank). Bin für Tipps dankbar, Holm
Dir ist aber schon klar ,dass du wenn du den Meßschieber über die USI (SPI Slave) einlesen würdest, wahrscheinlich mit 1 Mhz auskämst?
Ich denke, dein Gefühl täuscht dich. Wenn du die ISR sparsam programmierst (möglichst wenig Befehle), dann ist das kein Problem. Wenn du sogar noch über den USI gehen kannst, also dich nicht mehr um jedes einzelne Bit kümmern musst, dann entlastest du den Prozessor noch einmal.
@Wolfram und Winfried, Wie soll ich 2 unabhängige Meßschieber mit ein und der selben USI einlesen, multiplexen? Das wird mir dann aber eher zu doof.. Zum jetzigen Zeitpunkt läuft wie schon geschrieben die Ausgabe im SPI Master Modus über die Usi. Diese könnte man im Prinzip in der Anzeigen ISR auf Master umprogrammieren und wenn die 16 Bit raus sind, wieder zurück. Ich müßte dann aber für 2 Meßschieber jedesmal Clock und Daten umschalten und die Dinger irgendwie alternierend einlesen, wobei die auf die Dauer natürlich nicht mit der selben Taktfrequenz laufen werden. Gruß, Holm BTW: die USI ist ein Scheißding, da ist ja die SPI Highend dagegen..
Nochwas: Mein problem mit der Interruptlösung ist die Tatsache, daß ich während der ISR im Prinzip eine 32 Bit Zahl bitweise schieben muß. Das sind 4 Byte, das wird wohl zu lange dauern. Es währe höchstens möglich, 3 einzelne Bytes zu behandeln und diese dann außerhalb der ISR zusammenzusetzten. Das werde ich wohl mal probieren. Gruß, Holm
20MHz sind 200 Zyklen bei 100kHz, das ist dicke zu schaffen. Nimm einfach beide externen Interrupts auf die 1-0 Flanke für jeden Meßschieber. 4 Bytes zu schieben dauert exakt 4 Zyklen. Peter
Ich hab sowas ähnliches mal gemacht, hat auch funktioniert: Atmega 16 mit 4 MHZ getaktet (250ns/Takt). Das Einlesen der Daten uber Polling und schieben inkl. 3-fach-Sampling zur Glitch-Entfernung brauchte ca. 20 Takt-Zyklen.
Hallo Ka Suh Dein Post ist zwar schon eine weile her aber mich würde trotzdem deine Vorgehensweise interessieren, damit du einlesen und 3-fach-Sampling in nur 20 Takten geschafft hast. Ich meine die Daten vom Messchieber haben ja bereits 24-Bit. Wenn ich jetzt für jedes Bit zum einlesen 1 Takt benötige, sind das alleine ja schon mal 24 Takte und dass ohne 3-fach-Sampling. Also ich bin kein Experte in diesem Gebiet. Ich wurstle mich lediglich so durch meine Hobbyprojekte. ;-) Allso bitte sag es mir, wenn ich da irgendwo etwas falsch verstehe. freundliche Grüsse Remo
Remo Hug schrieb: > Allso bitte sag es mir, wenn ich da irgendwo etwas falsch verstehe. Da ich das Thema ca. 8 Jahre nach Ka Suh, genauer letzten Monat, auch programmiert habe, mische ich mich mal ein: Das Einlesen eines einzelnen Bits und Schieben in ein Register ist wohl mit den 20 Takten gemeint. Habe jetzt meinen asm-Code nicht hier, aber in diesem Bereich liegt meine Routine auch.
Hallo Thomas Demnach geht das doch nicht so, wie Ka Suh das Geschrieben Hat. Ka Suh schrieb: >Das Einlesen der Daten uber Polling und schieben inkl. 3-fach-Sampling zur >Glitch-Entfernung brauchte ca. 20 Takt-Zyklen. freundliche Grüsse Remo
Na dann melde ich mich auch noch mal... :-) Man kann heute sagen, das man dazu nichts mehr sagen kann. Ich habe mindestens 4 verschiedene Sorten Meßschieberelektroniken in der Hand gehabt, die auch ähnliche aber in Details unterschiedliche "Protokolle" benutzen. Teilweise betrifft das nur die Datenrate. Es gibt mittlerweile auch runde Meßuhren mit dieser Elektronik und Micro-USB Buchse dran, hatte mich beim probeweisen anstecken gewundert wieso das Kabel warm wird, naja, das was da drüber läuft hat mir USB nicht das Geringste zu tun, GND ist aber mit Minus und VCC mir Plus einer CR2032 direkt verbunden. Ich habe das glücklicherweise noch vor der Sprengung gemerkt... Es gibt Meßschieber da kann man mit der Off-Taste ausschalten, das Display geht auch aus, die Meßwerterfassung und das Senden von Daten betrifft das aber nicht :-) Es gibt mittlerweile auch welche die sich nach einer Weile Nichtbenutzung schlafen legen, blöde wenn man das Ding an eine Drehbank schrauben will.. Und dann gibts welche bei denen das Display über einen mit Heiß-leit-kleber angepappten Flexleiter mit der Platine verbunden ist, wehe da kommt ein Tropfen Öl ran.. Gruß, Holm
Remo Hug schrieb: > Demnach geht das doch nicht so, wie Ka Suh das Geschrieben Hat. Das kann für einen, evtl. auch zwei Messschieber durchaus funktionieren. Bei 90kHz Clock-Frequenz und 4MHz des Atmega hat man ja 44 Takte Zeit. Die meiste Zeit senden die Messschieber ja versetzt zueinander. Die neuen Atmegas haben ja alle Pin Change Interrupt, da kann man sich das Polling sparen und direkt auf die Flanke an Clock per IRQ reagieren. Dreifach-Abtastung ist ja schön, aber ich habe trotz Einfach-Abtastung auch keine Probleme. Undi wie Holm schreibt: Es existieren verschiedene Protokolle. Ein Oszi um festzustellen was aus dem Messschieber jeweils rauskommt ist unerlässlich.
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.