Forum: Mikrocontroller und Digitale Elektronik ich brauche mal eine Idee (digitaler Meßschieber)


von holm (Gast)


Lesenswert?

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

von Wolfram (Gast)


Lesenswert?

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?

von Winfried (Gast)


Lesenswert?

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.

von holm (Gast)


Lesenswert?

@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..

von holm (Gast)


Lesenswert?

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

von Peter Dannegger (Gast)


Lesenswert?

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

von Ka S. (kasuh)


Lesenswert?

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.

von Remo Hug (Gast)


Lesenswert?

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

von Thomas F. (igel)


Lesenswert?

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.

von Remo Hug (Gast)


Lesenswert?

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

von Holm T. (Gast)


Lesenswert?

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

von Thomas F. (igel)


Lesenswert?

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