Hallo,
ich möchte (bzw. muss) die Konfiguration eines Controllers über einen
analogen Wert festlegen.
Der ADC des Controllers hat eine Auflösung von zehn Bit, also 1024
Werte, Versorgungsspannung ist 3.3V, ergibt ~3.2mV.
Der Wunsch wäre es, eine acht Bit breite Konfiguration zu haben (vier
konfigurierbare Optionen mit jeweils vier möglichen Einstellungen), also
256 Werte. Das heisst, es bleibt gerade mal ein Bereich von ~12.8mV pro
Konfigurationswert. Mir fehlt bisher die Erfahrung mit AD-Wandlern,
daher frage ich mich, ob das zu eng ist und das nicht im Rauschen der
Stromversorgung untergeht.
Abgesehen davon hab ich noch nicht berechnet, ob man diese Spannungen
über einen Spannungsteiler, aufgebaut aus Widerständen mit 1%/2%/5%
Toleranz überhaupt einigermaßen genau genug hinbekommt.
Falls das ganze nämlich so nicht klappt muss ich notfalls eine der
Optionen streichen oder zumindest kastrieren, dann lande ich bei 128
bzw. 64 Konfigurationswerten, das sollte denke ich eher hinhauen.
Was meint ihr?
Ralf
> (vier konfigurierbare Optionen mit jeweils vier möglichen Einstellungen)
Sind bei mir 4 x 4 = 16 mögliche Einstellungen.
3.3V / 16 = 206,25mV
und 206,25mV sind 6,25% von 3,3V
Widerstände mit 1%... Das dürfte zunächst auf weniger als 100 Werte
rauslaufen.
Mit Kalibrierungstabelle und etwas Hoffnung (identische
Temperaturdrift/Alterung) etwas mehr.
Die untersten 1.5 ADC-Bit kannst Du eh vergessen. Auf mehr als 64 wirst
du mit vertretbarem Aufwand kaum kommen.
Wenn die Pins fehlen lässt sich sicher was besseres finden...
Uwe schrieb:>> (vier konfigurierbare Optionen mit jeweils vier möglichen Einstellungen)> Sind bei mir 4 x 4 = 16 mögliche Einstellungen.
Aber 256 Möglichkeiten für die Kombination jedes mit jedem
Uwe schrieb:>> (vier konfigurierbare Optionen mit jeweils vier möglichen Einstellungen)> Sind bei mir 4 x 4 = 16 mögliche Einstellungen.> 3.3V / 16 = 206,25mV> und 206,25mV sind 6,25% von 3,3V
Vier Optionen mit jeweils vier möglichen Einstellungen. Also jeweils 2
Bit für die Einstellungen. Vier Optionen * zwei Bit ergibt bei mir acht
Bit.
Oder seh ich's aus dem falschen Blickwinkel?
Marek N. schrieb:> Ähm,>> wenn du schon nen µC hast wieso schickst du ihm nicht per RS232, was er> machen soll?
Weil die Schaltung keinen UART-Anschluss vorsieht? Deswegen schrieb ich
oben dass ich's per AD-Wandler machen MUSS, aber ich hätte auch dazu
schreiben sollen, dass die "üblichen Verdächtigen" diesmal ausnahmsweise
nicht vorhanden sind :)
> Wie du auf die 8 Bit kommst ist mir unklar, vier mal vier sind 16 und> das kann man mit 4 Bit auflösen.
Siehe oben.
> Aber mal zur Auflösung von analogen Spannungen. Mit einem 10-Gang-Poti> und dem entsprechenden Drehknopf mit Skala mit 0,05-Einteilung kannst du> Problemlos 1/100-Stufen einstellen. Damit bist du bei knapp 7 Bit, somit> reicht das locker für deine 16 Stufen, wären 0,625 Umdrehungen pro> Stufe.
Okay, bei so nem Teil sorgt die Mechanik für die Genauigkeit. Da sich
die Konfiguration während dem Betrieb nicht ändert wird solch ein Poti
wahrscheinlich oversized sein.
> Ferner gibt es Codierschalter in den unterschiedlichsten Ausführungen,
Diese Schalter benötigen aber wesentlich mehr wie einen Pin :)
Wenn's aber nicht anders geht werd ich mir die Sache mit den Potis
nochmal angucken.
Stephan schrieb:> Widerstände mit 1%... Das dürfte zunächst auf weniger als 100 Werte> rauslaufen.
Stimmt, ist ja "nur" 1%. Hmmm...
> Mit Kalibrierungstabelle und etwas Hoffnung (identische> Temperaturdrift/Alterung) etwas mehr.
Darauf möcht ich mich nicht verlassen, die Schaltung soll mehrmals
aufgebaut werden.
> Die untersten 1.5 ADC-Bit kannst Du eh vergessen. Auf mehr als 64 wirst> du mit vertretbarem Aufwand kaum kommen.> Wenn die Pins fehlen lässt sich sicher was besseres finden...
Um die Aussage gings mir, zusammen mit den Infos der anderen werd ich
mich
mal auf die Suche nach Alternativen machen :)
Karl Heinz Buchegger schrieb:> Uwe schrieb:>>> (vier konfigurierbare Optionen mit jeweils vier möglichen Einstellungen)>> Sind bei mir 4 x 4 = 16 mögliche Einstellungen.> Aber 256 Möglichkeiten für die Kombination jedes mit jedem
Also war meine Rechnung richtig? Sch...ade :)
Danke an alle!
Ralf
>(vier konfigurierbare Optionen mit jeweils vier möglichen Einstellungen), >also
256 Werte.
Also für jede der vier Optionen jeweils vier unabhängige Einstellungen?
Ja, dann sind insgesamt 256 Werte notwendig.
Diese über einen 10-Bit ADC zu wählen ist möglich. Wenn Du das jedoch
tatsächlich so realisierst, wird dieser Schaltungsteil mit Sicherheit
massive Probleme verursachen. Einfach gesagt: vergiss es!
Als Kunde würde ich so ein verkrüppeltes Design niemals akzeptieren.
Versuche also irgend wie, die Optionen über einen digitalen Weg, zur Not
mit Mux, einzulesen.
Und hat er für seinen ADC überhaupt eine genügend genaue
Referenzspannungsquelle...
Kannst Du die Optionen nicht direkt beim flashen festlegen? Könntest Du
evtl.
über I^2C gehen?
High Performer schrieb:> Also für jede der vier Optionen jeweils vier unabhängige Einstellungen?
Korrekt.
> Ja, dann sind insgesamt 256 Werte notwendig.
Sach ich doch :)
> Diese über einen 10-Bit ADC zu wählen ist möglich. Wenn Du das jedoch> tatsächlich so realisierst, wird dieser Schaltungsteil mit Sicherheit> massive Probleme verursachen. Einfach gesagt: vergiss es!
Mach ich. Darum ging's mir ja, um die Abschätzung, ob das (vertretbar)
machbar ist.
> Als Kunde würde ich so ein verkrüppeltes Design niemals akzeptieren.
Genau diese Aussagen sind hilfreich, um das Problem zu bewerten -> das
ist ernst gemeint!
> Versuche also irgend wie, die Optionen über einen digitalen Weg, zur Not> mit Mux, einzulesen.> oder über ein Schieberegister?
Keine Chance, keine Pins frei :)
Marc schrieb:> Vieviel AD-Wandler Pins hast du denn zur Verfügung?
Einen :) Den zweiten brauch ich für was anderes.
High Performer schrieb:> Und hat er für seinen ADC überhaupt eine genügend genaue> Referenzspannungsquelle...grins Klar, die Versorgungsspannung. Wie ich sagte, mir fehlt die
Erfahrung mit AD-Wandlern, deswegen hatte ich ja gleich den Verdacht,
dass das alles im Rauschen der Versorgungsspannung untergehen könnte.
Der Controller hat zwar ne interne Referenz von 1.65V bzw. 1.8V, aber
das bringt mir nix, denn die kann ich nicht rausführen.
> Kannst Du die Optionen nicht direkt beim flashen festlegen?
Werd ich wahrscheinlich tun, zumindest einen Teil der Optionen werd ich
festlegen. Dass es dann mehrere Firmware-Stände gibt kann ich
verkraften, die Sicherheit der per ADC konfigurierbaren Optionen geht
vor.
> Könntest Du evtl. über I^2C gehen?
Nope.
Danke an alle für die Ideen/Vorschläge.
Ralf
Hä, bin ich doof?
Wieso denn 256? Für mich sinds immer noch nur 16:
Konf 1: Opt 1 bis 4
00:00
00:01
00:10
00:11
Konf 2: Opt 1 bis 4
01:00
01:01
01:10
01:11
Konf 3: Opt 1 bis 4
10:00
10:01
10:10
10:11
Konf 4: Opt 1 bis 4
11:00
11:01
11:10
11:11
Also ich zähl da immer noch nur 16 Zustände. Die Option "00" muss bei
der einen Konfiguration ja nicht unbedingt das gleiche bewirken, wie bei
den anderen usw. Die umschlüsslung kann ja wieder intern über
Look-up-Tabellen gemacht werden.
Oder blick ichs jetzt gar nicht?
An sonsten, da du den Controller (welchen überhaupt) flashen musst,
kannst du ihm nach dem Flashen ja noch ein paar Bits rüberstupsen über
die Konfiguration. Auch ein Pool von verschiedenen Hex-Files, mit an
sonsten gleichem Code aber der entsprechenden Codierung der
Konfiguration an entsprechender Stelle wäre denkbar.
One-wire wurde ja bereits genannt oder du könntest deinem Controller
auch was per Morse-Code schicken, da kannst du auch den AD-Wandler mit
verwenden, wenns analog sein soll. UART, SPI, I2C und die übrigen
Verdächtigen kann man auch per Software realisieren.
Wenn die Schaltung über ATE läuft, dann kannst du alles digital
konfigurieren, glaube mir, nichts ist teurer und ätzender, als an Potis
zu drehen. Habe selber eine Baugruppe von nem Kollegen 'geerbt' wo zum
'Abgleich' insgesamt elf (in Worten: 11!) Potis und sieben Jumper um-
und wieder zurückgesteckt werden müssen. - Und das Prüffeld ist am
Kotzen!
Beste Grüße, Marek
Marek N. schrieb:> Hä, bin ich doof?>> Wieso denn 256? Für mich sinds immer noch nur 16:> ...>> Also ich zähl da immer noch nur 16 Zustände. Die Option "00" muss bei> der einen Konfiguration ja nicht unbedingt das gleiche bewirken, wie bei> den anderen usw. Die umschlüsslung kann ja wieder intern über> Look-up-Tabellen gemacht werden.> Oder blick ichs jetzt gar nicht?
Schau dir nochmal deine Tabelle an. Sie sagt aus, dass man aus _einer
von vier_ Optionen wählt und von der einen gewählten Option vier
mögliche Zustände selektieren kann.
Ich brauche aber vier von vier konfigurierbaren Optionen :)
Also:
33221100
^^ Option 1 * 2 Bit = Vier Zustände
^^ Option 2 * 2 Bit = ...
^^ Option 3 ...
^^ Option 4 ...
> An sonsten, da du den Controller (welchen überhaupt) flashen musst,> kannst du ihm nach dem Flashen ja noch ein paar Bits rüberstupsen über> die Konfiguration. Auch ein Pool von verschiedenen Hex-Files, mit an> sonsten gleichem Code aber der entsprechenden Codierung der> Konfiguration an entsprechender Stelle wäre denkbar.
Stimmt, das wäre auch noch denkbar. Die Flasher-Hardware kann man glaub
ich per DLL ansprechen, so ein Progrämmchen müsste schnell geschrieben
sein.
> One-wire wurde ja bereits genannt oder du könntest deinem Controller> auch was per Morse-Code schicken, da kannst du auch den AD-Wandler mit> verwenden, wenns analog sein soll. UART, SPI, I2C und die übrigen> Verdächtigen kann man auch per Software realisieren.
Nein, das ist alles nix, das Käferchen soll standalone ohne noch was
zusätzlich programmieren/flashen zu müssen lauffähig sein, Spannung ran
und gut. Ich denke der Ansatz mit den fixen Firmware-Versionen bzw. den
Konfig-Bytes zusätzlich reinproggen dürfte das am besten geeignete sein.
> Wenn die Schaltung über ATE läuft, dann kannst du alles digital> konfigurieren, glaube mir, nichts ist teurer und ätzender, als an Potis> zu drehen. Habe selber eine Baugruppe von nem Kollegen 'geerbt' wo zum> 'Abgleich' insgesamt elf (in Worten: 11!) Potis und sieben Jumper um-> und wieder zurückgesteckt werden müssen. - Und das Prüffeld ist am> Kotzen!
Das glaub ich dass die kotzen. Dass es manchmal nicht geht, dass man
einfach die Baugruppe aufschnallt und alles ohne weiteres zutun getestet
werden kann ist klar, aber bei elf Potis und sieben Jumpern würd ich
auch würgen :)
Wobei sich zumindest die Jumper ja per Nadeladapter emulieren lassen
dürften, aber das hilft bei elf Potis auch nicht viel.
Ralf
Was hast du denn sonst nocht so an den Pins.
Mir fallen nämlich gerade die Motorregler aus der Modellbau Branche ein.
Die haben ein ähnliches Problem. Man muss sie konfigurieren, hat aber
keine Bedienelemente.
Bei denen geht das so:
Wenn beim Anlegen der Spannung an den Baustein bestimmte Bedingungen
vorliegen (bei dir könnte das sein: Spannung am Konfig-Pin) gehen sie in
den Konfig Modus.
Der Regler piepst dann zb einmal (über den Motor!)
Du hast dann zb ein paar Sekunden Zeit mit dem Konfig Pin 2 mal
hintereinander einen 1 Puls einzuspeisen. Nach einer gewissen Wartezeit
übernimmt der Regler die Einstellung und piepst mit dem Motor 2 mal
(weil du 2 Pulse reingegeben hast.
Die nächste Einstellung wird vom Regler abgefragt, indem er wieder
darauf wartet, dass ich am Konfig Eingang mittels einer Pulszahl meine
Wahl einstelle. Die wird wieder vom Regler durch eine entsprechende
Anzahl Piepser bestätigt und weiter gehts zur nächsten.
etc. etc.
Ganz zum Schluss spielt der Regler noch eine kleine Melodie über den
Motor ab, damit ich als Benutzer weiß, dass das jetzt fertig ist. Manche
Regler geben hier auch die komplette Konfiguration zur Kontrolle noch
einmal aus.
High Performer schrieb:> Und hat er für seinen ADC überhaupt eine genügend genaue> Referenzspannungsquelle...
Was hat das mit der Genauigkeit der Referenzspannung zu tun. Seit der
Erfindung der ratiometrischen Messung sollte die unwesentlich sein. Am
besten man speist den ADC und die Widerstandsansammlung aus der
gleichen, gut vom µC-Dreck entkoppelten Spannung.
>Was hat das mit der Genauigkeit der Referenzspannung zu tun.
Yepp, Du hast natürlich Recht! Für diese Anwendung versorgt er die R's
UND den ADC ja über dieselbe Spannung. Da waren die Finger mal wieder
schneller als das Gehirn ;-)
Mea culpa
Ralf schrieb:> Deswegen schrieb ich> oben dass ich's per AD-Wandler machen MUSS, aber ich hätte auch dazu> schreiben sollen, dass die "üblichen Verdächtigen" diesmal ausnahmsweise> nicht vorhanden sind :)
Ich verstehe nicht ganz, wie du zu deiner MUSS-Aussage kommst? Was
spricht dagegen, die Daten per 1-Wire Protokoll zu übertragen? Unzählige
Bausteine kommunizieren so bidirektional über einen Pin und einen µC
kannst du prima als 1-wire Slave programmieren.
Beitrag "1-Wire Slave auf AVR"
High Performer schrieb:> Rs, ohne Apostroph, nicht dass ich gleich wieder einen Rüffel> kassiere...
R's mit Apostroph ist schon ok. Der Apostroph als Auslassungszeichen
steht da schon richtig, schließlich heißt es auf denglisch "R[esistor]s"
Karl Heinz Buchegger schrieb:> Was hast du denn sonst nocht so an den Pins.
Alle anderen Ports sind Ausgänge, an denen LEDs hängen. Wenn ich
natürlich so drüber nachdenke könnte mir evtl. eine Möglichkeit
einfallen, diese Ports für die Konfiguration zu verwenden, bevor ich sie
als Ausgang konfiguriere... GrübelnAnfang Ich denk da mal genauer
drüber nach...
> Mir fallen nämlich gerade die Motorregler aus der Modellbau Branche ein.> Bei denen geht das so:
Antwort siehe unten.
Matthias schrieb:> Ich verstehe nicht ganz, wie du zu deiner MUSS-Aussage kommst? Was> spricht dagegen, die Daten per 1-Wire Protokoll zu übertragen? Unzählige> Bausteine kommunizieren so bidirektional über einen Pin und einen µC> kannst du prima als 1-wire Slave programmieren.
Ganz einfach: Das Käferchen soll standalone eine Spannung messen und die
LEDs entsprechend ansteuern. Die Konfigurationen bestimmen wie die LEDs
angesteuert werden. Alle Lösungen mit I2C, Konfig-Pulsen, 1-wire, etc.
bedingen entweder einen zweiten Controller, ein EEPROM, ein
Schieberegister oder sonstwas, es wäre eben schnucklig drauf verzichten
zu können einen Controller (oder ähnliches) vor den Controller schalten
zu müssen :)
Ralf
>Mir fallen nämlich gerade die Motorregler aus der Modellbau Branche ein.
Die haben ein ähnliches Problem. Man muss sie konfigurieren, hat aber
keine Bedienelemente.
Kenn ich... piepp. piepp.
Klingel - ein Telephon...
der Regler macht von selbst weiter und verheddert sich im Nirgendwo. -
in die Tonne mit dem Regler, kann man nicht wiederholen.
... das absolut Duemmste, das mir je passiert ist.
Ein Kollege macht mit einem Pot, einer Taste und einem Menu auf einem
LCD Konfigurationen. Das geht.
Ralf schrieb:> Alle anderen Ports sind Ausgänge, an denen LEDs hängen. Wenn ich> natürlich so drüber nachdenke könnte mir evtl. eine Möglichkeit> einfallen, diese Ports für die Konfiguration zu verwenden, bevor ich sie> als Ausgang konfiguriere...
Schieberegister! Einen von den LED Ausgängen an Reset, einen anderen an
Clock, den Ausgang an den freien Eingang des µC. Dann einmal Reset, 8
mal Clock und dabei einlesen. Das geht so schnell, da sieht keiner die
LEDs leuchten. Wenn dann im Betrieb das Schieberegister mitklappert, den
Eingang ignorieren.
Pico Oschi schrieb:>>Mir fallen nämlich gerade die Motorregler aus der Modellbau Branche ein.> Die haben ein ähnliches Problem. Man muss sie konfigurieren, hat aber> keine Bedienelemente.>> Kenn ich... piepp. piepp.> Klingel - ein Telephon...> der Regler macht von selbst weiter und verheddert sich im Nirgendwo. -> in die Tonne mit dem Regler, kann man nicht wiederholen.> ... das absolut Duemmste, das mir je passiert ist.
Ist mir noch nie passiert.
Mag vielleicht auch daran liegen, dass ich kein Mensch bin, der beim
leisesten Telephonklingeln sofort alles stehen und liegen lässt. Und
wenn ich doch unterbrechen muss, dann klau ich halt dem Regler den Saft
und mach nachher weiter. Aber im Grunde war noch nie etwas so dermassen
wichtig, dass ich die 45 Sekunden Konfiguration nicht vollständig zu
Ende gebracht hätte.
> Ein Kollege macht mit einem Pot, einer Taste und einem Menu> auf einem LCD Konfigurationen. Das geht.
Welchen Teil der Anforderung "Es ist nur 1 Pin frei und es soll so
simpel wie möglich sein" hast du nicht verstanden?
Ralf schrieb:> Karl Heinz Buchegger schrieb:>> Was hast du denn sonst nocht so an den Pins.> Alle anderen Ports sind Ausgänge, an denen LEDs hängen.
Passt doch wunderbar.
Taster an den einen freien Pin. Ist der beim Einschalten gedrückt, gehts
in die Konfig. Einige deiner LEDs zeigen an, was gerade konfiguriert
wird, andere zeigen die ausgewählte Möglichkeit an. Tstendruck schaltet
zur nächsten Möglichkeit weiter. Nach 5 Sekunden Stille am Konfig
Taster, wird die nächste Option angewählt, die momentan dafür
eingestellte Möglichkeit angezeigt und der Benutzer darf sich mit dem
Taster wieder austoben.
Das ist doch eine Sache auf, ich will jetzt nicht sagen ein paar Minuten
aber in der Zeit in der du hier nachfragst hättest du das schon längst
realisiert.
Ralf schrieb:>> Mir fallen nämlich gerade die Motorregler aus der Modellbau Branche ein.>> Bei denen geht das so:> Antwort siehe unten.
Du meinst Pico Oschi?
Ähm. Kannst du programmieren oder kannst du nicht programmieren? Sagt
doch keiner, dass du den gleichen Schwachsinn programmieren musst.
Ausserdem glaub ich ihm die Geschichte nicht. Akku abziehen, neu
anstecken und die Elektronik erneut in den Konfig Modus bringen. Für den
Regler lebenswichtige Dinge kannst du da sowieso nicht einstellen. Und
ob die LiPo Abschaltspannung zwischendurch mal bei 60% anstatt 75% steht
ist doch (für das 'Überleben' des Reglers) wirklich wurscht.
So wie bei dir auch: Ob die Schaltung bei einer Bedienerablenkung
anstatt Lichtpunkt auf Leuchtband geht, darf doch dein Programm nicht
unbrauchbar machen. Dann drehst du halt den Saft ab, drückst den Taster,
Saft drauf und gehst die Konfiguration noch mal durch.