Bascom und "Boolean"

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 28 11 2024  21:49:59      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( Vorherige Seite 1 | 2 )      


Autor
Bascom und "Boolean"

    







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·102 + 3·101 + 5·100, 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


Vorherige Seite      
Gehe zu Seite ( Vorherige Seite 1 | 2 )
Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


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