mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 7segment in bascom


Autor: Marcel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi leute ich weis nicht ob ich hir richtig bin aber ich habe ein problem
unzwah wie kann ich ein byte in 2 neue byte's splitten geht das oder nur 
mit string????
DEnn ich habe einen 2 selligen byt und mochte den splitten in 2 weitere
oder hat bascom für 7 segment schon was drin bitte um hilfe


Mfg Marcel

Autor: (nicht "Gast") (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst einen Duden.

Gast

Autor: Kluchscheißernder Nixwisser (kluchscheisser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(nicht "Gast") schrieb:
> Du brauchst einen Duden.

Das denke ich nicht, die Infos, die er braucht, stehen nicht im Duden.

Marcel schrieb:
> Hi leute

Hi Marcel

> ich weis nicht ob ich hir richtig bin

Vermutlich schon.

> aber ich habe ein problem
> unzwah wie kann ich ein byte in 2 neue byte's splitten geht das oder nur
> mit string????

Nöö, das geht auch anders. Mit String ist aber nicht die schlechteste 
Lösung.

> DEnn ich habe einen 2 selligen byt und mochte den splitten in 2 weitere

Das solltest Du nochmal überdenken, es ist sehr wahrscheinlich, dass Du 
Dich hier irrst.

Da ich das Stichwort "DS1820" gesehen habe, gehe ich davon aus, dass Du 
einen Integer (16-Bit-Zahl im Zweierkomplement) hast, den Du in einzelne 
Ziffern zerlegen willst, um diese im Multiplexverfahren auf der 
Siebensegmentanzeige auszugeben.

> oder hat bascom für 7 segment schon was drin bitte um hilfe

Nicht dass ich wüsste.

Du kannst aber mit DIM Overlay (in Hilfe zu Dim nachschaun) einen String 
auf den Speicherbereich des Arrays legen. Du wandelst dann jeden 
Messwert (Integer) in diesen String um, und schon stehen die ASCII-Werte 
der Ziffern und Zeichen im Array. Aus diesen lassen sich dann in der 
Multiplexroutine die Ziffern extrahieren, indem man den ASCII-Offset für 
Ziffern (48) subtrahiert.

Die Multiplexroutine würde ich aber nicht mit Wait timen, sondern in 
einen Timer-Interrupt einbetten. Und vor dem Wechsel des 
Segmentbitmusters würde ich erstmal alle Stellen dunkel schalten, 
ansonsten glimmen unbeteiligte Segmente mit.

Ich habe mir Deinen Quelltext nur kurz angesehen. Er sieht so aus, als 
ob er von Dir aus irgendwelchen unverstandenen Beispielen 
zusammenkopiert wurde. Wenn Du ernsthaft programmieren willst, solltest 
Du Dir zum Grundsatz machen, keinen fremden unverstandenen Code zu 
benutzen. Und bitte kommentiere Deinen Code, und zwar in der Sprache, in 
der Du denkst bzw. überlegst (also in Deutsch, solange Du nicht in 
Englisch denkst).

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin mir auch nicht sicher, ob es das ist was du suchst. Aber ich geb 
einfach mal ein Beispiel.
Nehmen wir die Zahl 28
Und zwar als Zahl und nicht als String


   28 / 10       ->   2
                      |
        +-------------+
        |
        v
   28 - 2 * 10   ->   8

In Summ wurde die Zahl 28 in die Ziffern 2 und 8 zerlegt.
(und die zweite Konstruktion habe ich nur gewählt, weil ich nicht wei´ß, 
wie die Modulo Operation in BASCOM heißt)

   765

   765 / 100      ->           7
   765 - 7 * 100  ->  65
    65 / 10       ->           6
    65 - 6 * 10   ->           5


Auch wenn man in BASCOM arbeitet, muss man sich daran gewöhnen, dass es 
nicht für alles und jedes eine fix&fertige Komponente gibt

Autor: Kluchscheißernder Nixwisser (kluchscheisser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen Karl-Heinz,

bei Ziffernzerlegung mit Modulo wird es ganz schön rechenintensiv, 
außerdem müsste man da zuvor den Messwert auf Negativ prüfen und ggf. 
das Zweierkomplement davon bilden. Das alles ist in der Stringumwandlung 
bereits drin. Und da man mit Dim ... As Overlay quasi eine Union 
schaffen kann, stehen die ASCII-Werte des Strings ohne weitere Rechnerei 
im Array.

Wenn das mit den negativen Messwerten nicht wäre, hätte ich die 
Subtraktionsmethode (Subtraktion in Schleife) vorgeschlagen, die ist auf 
dem AVR immer noch die schnellste Methode, Zahlen in Ziffern zu 
zerlegen.

Gruß in die Berge.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kluchscheißer Kluchscheißer schrieb:
> Guten Morgen Karl-Heinz,
>
> bei Ziffernzerlegung mit Modulo wird es ganz schön rechenintensiv,
> außerdem müsste man da zuvor den Messwert auf Negativ prüfen und ggf.
> das Zweierkomplement davon bilden. Das alles ist in der Stringumwandlung
> bereits drin.

Ach?
Und du denkst, die Umwandlung in einen String kriegst du gratis?
Schon mal angesehen, wie diese Umwandlungen in einen String 
funktionieren?
Psst: Die machen genau dasselbe, nur innerhalb der Funktion und 
zusätzlich kommt dann die ganze Stringverwaltung auch noch dazu. Zudem 
entsteht das Ergebnis in ASCII und mann es dann erst wieder von ASCII 
wegholen, damit man es als Index in die Tabelle der Bitmuster für die 
7-Segment benutzen kann.

Also 'Rechenzeit' ist kein Argument.
Und ob das in Summe programmtechnisch einfacher ist?

> hätte ich die Subtraktionsmethode (Subtraktion in Schleife)
> vorgeschlagen, die ist auf dem AVR immer noch die schnellste
> Methode, Zahlen in Ziffern zu zerlegen.

Das ist allerdings ein Argument.
Negative Zahlen sind hingegen simpel. Ein if, sich merken dass ein - 
davor muss, und einfach die Zahl positiv machen.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist ein Experiment mit Siebensegmentanzeige in Bascom:
http://www.hanneslux.de/avr/divers/pm24/VM_tn24_1.bas

Und hier ist die zugehörige Hardwarebeschreibung:
http://www.hanneslux.de/avr/divers/pm24/index.html

Nur mal so unverbindlich, zum schaun, wie man es auch machen könnte.

...

Autor: Paul Baumann (paul_baumann)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist noch eine Variante von mir, die mit der Stringfunktion 
arbeitet.

MfG Paul

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo wie Kluchscheißer schon vermutet hat möchte ich:

Da ich das Stichwort "DS1820" gesehen habe, gehe ich davon aus, dass Du
einen Integer (16-Bit-Zahl im Zweierkomplement) hast, den Du in einzelne
Ziffern zerlegen willst, um diese im Multiplexverfahren auf der
Siebensegmentanzeige auszugeben

kann mir dabei einer helfen?

Mfg Marcel

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe meine 7 segment anzeigen Multiplex und ich habe eine 2 
setellige
zahl vom ds1820 vorliegen und ich wollte jetzt wissen wie ich die auf 2 
sieben segment anzeigen bekomme


MFG Marcel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was an den vorher geposteten Antworten passt dir jetzt nicht, dass 
du sie nicht zumindest mal ausprobierst?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.