Bascom und "Boolean" Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
|
|
|
BID = 749827
Bartholomew Inventar
Beiträge: 4681
|
|
Schicke Platine - Eigenbau?
Aber zur Aufmunterung von Kleinspannung wird die SMD-Bauweise bestimmt nicht beitragen
Hier noch eine Seite, die sich mit den beiden Ausgängen QS1/QS2 bzw. Qs/Q's beschäftigt:
http://www.progforum.com/showthread.php?t=6169
Gruß, Bartho
[ Diese Nachricht wurde geändert von: Bartholomew am 21 Feb 2011 12:03 ] |
|
BID = 749998
Kleinspannung Urgestein
Beiträge: 13360 Wohnort: Tal der Ahnungslosen
|
|
Danke Jungs,so sachte kommt Licht ins dunkel!
Besonders nach Barthos Ausführungen und Links fang ich sachte an zu Begreifen,was es so mit den Latches,Strobes und Clocks auf sich hat.
Mal sehen,was noch so draus wird,der 4094 ist auf jedenfall grad ein nettes Spielzeug geworden...
Zitat :
Bartholomew hat am 20 Feb 2011 03:40 geschrieben :
|
denn bei Multiplex müsste man ja jeweils 8 Leitungen von Segmentanschlus zu Segmentanschluss durchschleifen, und diese Bahnen auch noch kreuzen.
|
Nicht,wenn einem vor ner Weile mal paar 4-Stellige 7-Segmantanzeigen kostenlos in die Hände gefallen sind,die intern schon durchverbunden sind und nur getrennte Kathoden haben.
Sprich,das Ding hat nur 12 Pins aussen dran.
Schreit in meiner Unwissenheit förmlich nach Multiplexing.
Weiß nur noch nicht,wie ich das meinem Mega8 beibringen soll
Zitat :
| Abgesehen davon, daß die Schiebereien wenig mit den ursprünglich angesprochenen Boolschen Variablen, sondern eher etwas mit Modulo 2 Arithmetik zu tun haben, |
JA,hab ich inzwischen auch gemerkt.War halt nur in dem ersten Codeschnippsel so drin,und weil ich damit nix anfangen konnte...
Es kann aber gern mal einer die Überschrift ändern,hab mir sagen lassen,Mods dürfen und können das...
Zitat :
| Schicke Platine - Eigenbau? |
Sieht man doch.
Der obere linke Fliegendrecker ist schief...
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein) |
|
BID = 750004
Bartholomew Inventar
Beiträge: 4681
|
Freut mich
Jawoll, die 4*7-Segmentanzeige will gemultiplext werden.
Am sinnvollsten macht man das mit einer timergesteuerten Interruptroutine, die alle 5ms (oder so) aufgerufen wird und jeweils ein anderes Segment zum Leuchten bringt. Die Interruptroutine muss prüfen, welche Anzeige für den nächsten Zyklus dran ist mit leuchten, den entsprechenden Zahlenwert in die Anzeige schreiben und umschalten.
Wenn Du noch keine Erfahrung mit solchen Interrupts hast, kannst Du auch erstmal Warteschleifen nehmen, um die Anzeige zu multiplexen. Wenn das funktioniert, kannst Du die Interrruptmethode zusammenschustern. Die Interruptmethode hat den Vorteil, dass man dann ide maximale Rechenzeit bekommt, um das eigentliche sinnvolle Programm auszuführen, welches die Anzeigewerte liefert (der Anzeigealgorithmus ist ja bloß nötiges Übel); außerdem kann man dann die Interruptroutine als Standardcode auch leicht in andere Programme einbauen.
In Hardware würde ich das mit zwei kaskadierten 4094ern lösen: Eines steuert die acht aktiven Kathoden, und das andere treibt jeweils eine der vier Sammelanoden (evtl. sind Treibertranistoren nötig).
Mit Bascom-Beispielcode für den Mega8 kann ich leider nicht dienen, bloß mit PIC-Assembler von Sprut (wird Dir wohl leider vorkommen wie französisch):
http://www.sprut.de/electronic/pic/programm/led.htm
Dort ohne Schieberegister, aber mit Multiplexing (mit 12 Leitungen zwischen µC und Anzeige).
Gruß, Bartho
|
BID = 750458
Kleinspannung Urgestein
Beiträge: 13360 Wohnort: Tal der Ahnungslosen
|
Also:
Das mit dem "Multiplexing" in der Timergesteuerten ISR hab ich auch hinbekommen.
(hab mit den Timern und Interrupts schon früher mal was gemacht)
Aber nun tut sich gleich das nächste Problem auf.
Damit irgendwann auch mal was "sinnvolles" angezeigt werden kann,hab ich einen DS18S20 1Wire Temperatursensor genommen.Das auslesen dessen ist kein Problem,und ausgabe auf LCD auch nicht.
Nun liefert mir der Kollege im Moment einen Hex-Wert oder eine 3-stellige Dezimalzahl als Temperaturwert.
Als 235 dez. bedeuten 23,5°.
Und wenn ich das nun verschieberegistern will,müsste ich die Zahl ja "zerhackstücken".Also erst die 2 senden,umschalten,dann die 3 und dann die 5.
Und nun hab ich keinen Plan wie das gehen soll.
(vermutlich wieder mit irgendeiner Bitschubserei)
Und ja,ich weiß das der Mega8 genügend Portpins noch über hat um das auch allein ohne Schieberegister hinzubekommen.
Aber es geht ums Verständniss,um den Spaß an der Freude,und das ich das mal später auf nem Ttiny probieren will.
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein)
|
BID = 750466
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Moin!
Ja, du musst aus der Zahl 235 die einzelnen Ziffern berechnen, in eine Binärzahl umrechnen und als Index für deine Tabelle nutzen.
235 ist nichts anderes als 2·10 2 + 3·10 1 + 5·10 0, also 200 + 30 + 5.
Um die Ziffern zu bestimmen, kannst du folgendes rechnen (ist auf einem AVR jetzt nicht unbedingt soooo effektiv...):
235 \ 100 = 2 (Ziffer für Hunderter)
235 - (2*100) = 35
35 \ 10 = 3 (Ziffer für Zehner)
35 - (3*10) = 5 (Ziffer für Einer)
So ermittelst du sukzessive die Wertigkeiten der Dezimalzahl und kannst die dabei entstehenden Ziffern über deine Tabelle als Index direkt auf dem Display ausgeben .
Etwas zur Division:
Ich habe oben den Backslash benutzt, der steht im Allgemeinen für Ganzzahldivision, verwirft also den Rest. Da hier mit ganzen Zahlen gerechnet wird, kannst du auch eine einfache Division mit / durchführen, um an die jeweiligen Wertigkeiten zu kommen.
Der Algorithmus ist nicht sehr effektiv auf einem AVR: kein AVR beherrscht Ganzzahldivision in Hardware und nur einige wenige können in Hardware multiplizieren. Aber wen interessieren im Zweifelsfall die paar Millisekunden. Mit einigen Tricks würde man es sicherlich schneller hinbekommen.
Edit:
Es werden hierbei übrigens "führende Nullen" erzeugt. Wenn das unerwünscht ist, muss noch ein wenig Code hinzu.
Hier sieht man auch so schön, warum es mit ein bischen Bitschubsen nicht getan ist. Hätte man es mit reinen Zweierpotenzen zu tun, würden Bitschiebeoperationen reichen und es wäre alles ziemlich flott.
Hier in BASIC:
dim einer as byte
dim zehner as byte
dim hunderter as byte
dim eingabe as byte
hunderter = nummer / 100
nummer = nummer - hunderter * 100
zehner = nummer / 10
nummer = nummer - zehner * 10
einer = nummer
setze_segment(seg_3, ziffern_tabelle(hunderter))
setze_segment(seg_2, ziffern_tabelle(zehner))
setze_segment(seg_1, ziffern_tabelle(einer))
Das ist vielleicht nicht der ausgefeilteste Code, funktioniert aber so
_________________
[ Diese Nachricht wurde geändert von: DonComi am 23 Feb 2011 23:29 ]
|
BID = 750467
Bartholomew Inventar
Beiträge: 4681
|
Hoi,
Zitat :
| Und ja,ich weiß das der Mega8 genügend Portpins noch über hat um das auch allein ohne Schieberegister hinzubekommen.
Aber es geht ums Verständniss,um den Spaß an der Freude,und das ich das mal später auf nem Ttiny probieren will. |
Löblich
Zunächst behauptest Du, die Einer- Zehner- und Nachkommastelle der Anzeige wäre null (D:000).
Dann nimmst Du den Sensorwert (hier:S:235) und versuchst, 100 abzuziehen. Klappt das, ohne dass das Ergebnis (hier: S:135) negativ wird, setzt Du die Zehnerstelle der Anzeige eins hoch (D:100). Dann versuchst Du das nochmal (035)und setzt die Zehnerstelle wieder eins hoch (D:200). So lange wiederholen, bis das Ergebnis negativ wird (S:-65). Ist das der Fall, wieder 100 draufrechnen (S:035), die Zehnerstelle so lassen und zur Einerstelle gehen.
Dort dann das gleiche Verfahren wie bei der Zehnerstelle. Raus kommt S:005 und D:230.
Als letztes kommt die Nachkommastelle. Ist der Sensorwert schließlich 0, sind alle Werte in die einzelnen Anzeige-Speicherzellen übertragen (D:235).
Die Anzeige-Speicherzellen werden dann noch in die richtigen Bitmuster für die Siebensegmentanzeige umgewandelt.
Abschließend kann man noch einen Filter drüber laufen lassen, der unschöne führende Nullen auf der Zehnerstelle löscht (so dass z.B. 4.5 angezeigt wird und nicht 04.5).
Gruß, Bartho
Nachtrag:
David war schneller
Zitat :
| Der Algorithmus ist nicht sehr effektiv auf einem AVR: kein AVR beherrscht Ganzzahldivision in Hardware und nur einige wenige können in Hardware multiplizieren. |
Deswegen der mein Vorschlag, wie in der Grundschule in einer Schleife bloß Subtraktionen und Additionen durchzuführen, die kann der µC nämlich
[ Diese Nachricht wurde geändert von: Bartholomew am 23 Feb 2011 23:33 ]
|
BID = 750469
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Hallo Bartho
Ich habe unzählige Programme geschrieben, immer auf Effektivität geachtet. Ergebnis: kleine, schnelle Programme, die am Ende außer mir niemand verstand und im AVR am Ende noch 80% ROM frei blieben, ungenutzt.
Mittlerweile habe ich es aufgegeben, und schreibe Programme so, dass sie verständlich sind.
BASCOM murkst schon so viel, dass die Softwaremultiplikation und -division auch egal ist .
Beispielsweise könnte man mit BCD rechnen, das ist unter Umständen effektiver. Das kommt aber auch auf den Temperaturgeber an. Wenn der BCD ausspuckt kann man damit fast weiterarbeiten. BCD ist halt etwas größer wenn ungepackt (gepackt ist der Aufwand wieder größer ).
_________________
|
BID = 750476
Bartholomew Inventar
Beiträge: 4681
|
Man merkt, dass ich momentan viel mit Assembler arbeite, gelle?
Kleinspannung kann sich ja eine der beiden Methoden aussuchen, doppelt hält besser (und dient dem Verständnis)
Gruß, Bartho
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag heute wurden bisher 18 Beiträge verfasst © x sparkkelsputz Besucher : 182420451 Heute : 4949 Gestern : 7490 Online : 327 28.11.2024 21:49 5 Besucher in den letzten 60 Sekunden alle 12.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.357518911362
|