Bascom Led matrix

guten abend,

danke für den dcf tipp, habe nen BC337 eingebaut nu geht's wieder. Seltsam ist nur, bei der variante vor den schieberegistern hat's auch ohne funktioniert, war vermutlich reines glück.

Frage: tristate das der ausgang dann hochohmig ist ist mir denke ich klar und dann die 1 im kreis schieben find ich auch gut. wie setzte ich den ausgang auf tristate ??
Und ist das eine zuverlässige lösung, kann die 1 dann nicht mal "verloren" gehen ???

ist tristate = Port als Eingang ohne Pullup ???

warum sollte ich eigentlich die SPI PINS benutzen ???

danke gruß
 
Ja genau, Tristate ist hochohmig. Das ist außerdem der Grundzustand der Pins nach dem Reset. sieh Dir mal Figure22 auf Seite 52 im Datenblatt des Mega8 an.

'Ne null im Datenrichtungsregister (="Eingang") legt den Ausgangstreiber des Beinchens still ('ne eins aktiviert den).
Darüber siehst Du ein And-Gatter, welches den Pullup des Beinchens auf Vcc legt, aber nur, wenn das Pullup-Disable-Bit (PUD) NICHT gesetzt ist, das Datenrichtungs-Bit NICHT gesetzt ist und das Port-Bit ("Pegel") gesetzt ist.
also: PUD=0, DDRx.n=0, PORTx.n=0 -> Beinx.n=tristate.

Strenggenommen ist nach dieser Figure also das Beinchen immer mit dem Pullup verbunden - nur der Pullup eben nicht immer mit Vcc

Warum diese Beinchen? Weil Deine Schaltung die bereits so vorgesehen hatte, und weil Du da nichts unternehmen mußt, um die Schaltung ISP-fähig zu halten. Beachten mußt Du aber, daß der Programmer dabei dann Bits in die Schieberegister clockt. Also solltest Du den Reset-Eingang der Schieberegister mit auf das Reset-Netz des Controllers legen.

"verloren gehen": die 1 liegt ja immer an irgendeinem Ausgang der Schieberegister an, mit jedem Takt wird sie eins weitergeschoben. Irgendwann fällt sie aus dem letzten Ausgang des ersten Registers heraus, aber der letzte Ausgang ist ja mit dem Eingang des nächsten Registers verbinden. Also wird die 1 dann dort eingetaktet, klar?
Irgendwann fällt sie dann natürlich auch da raus, aber hier kommt der Widerstand ins Spiel:
Du verbindest den letzten verwendeten(!) Ausgang der beiden Register mit dem Eingang des ersten Registers. Damit ist der Kreis dann geschlossen, die 1 kann nicht mehr raus (Ok, das ist nur'ne Kopie - die Original-Eins wandert bis zum Ende und fällt raus, aber das ist Dir ja egal)

Warum der Widerstand?
Nach dem Reset sind quasi Nullen im Register, die Ausgänge alle auf Gnd geschaltet. Insbesondere also auch der, der mit dem Eingang verbunden ist.
Wenn Du initial jetzt Deine Eins eintakten willst, legst Du den Controllerpin, der ja auch mit dem Netzt verbunden bist auf Vcc (Hi und Ausgang). Dadurch hast Du 'n quasi-Kurzschluß von Vcc über den Treiber im Controller, über den Ausgangstreiber des Schieberegisters nach Gnd...
 
Hi,

Warum diese Beinchen? Weil Deine Schaltung die bereits so vorgesehen hatte, und weil Du da nichts unternehmen mußt, um die Schaltung ISP-fähig zu halten. Beachten mußt Du aber, daß der Programmer dabei dann Bits in die Schieberegister clockt. Also solltest Du den Reset-Eingang der Schieberegister mit auf das Reset-Netz des Controllers legen.
das hat dann aber auch nur Auswirkungen wenn der Reset von "außen" ausgelöst wird. Also zB durch einen ISP-Progger oder einen Reset-Controller (Supervisory-Chip) oder nen Taster. Wie ich dich kenne tippe mal das du das gemeint hast (in Bezug auf den Progger).

Manche Leute vergessen leider das der Reset-Pin nur ein Eingang ist. Was man da anschließt kann nicht vom Atmel ge"resettet" werden.

Gruß
Dino
 
Hmm.. ja...

Im Schematic bei #30 liegen die Reset-Eingänge der Schieberegister direkt auf Vcc.D agibts also nur'n Power-On-Reset, oder?
Wenn also die SPI-Leitungen verwendet werden, wird beim programmieren irgendwas mit in die Register eingeclockt. Wenn der ISP-Programmer also den Reset des Controllers aufhebt, befindet sich immer noch irgendwas in den Schieberegistern - im Worst-Case alles einsen.
In Software könnte man also erstmal die Spaltenausgänge inaktiv lassen, und nullen durchclocken, vor der 1 und dem ersten aktivieren der Spalten, oder man sorgt bereits beim programmieren für geordnete Verhältnisse. dazu könnte man auch die Reseteingänge der Register mit'nem Pulldown auf Gnd ziehen, und dann durch den Controller den Reset aktiv aufheben lassen, mit einem weiteren Pin.

Oder man legt die Register mit ihren Reseteingängen mit auf das Reset-Netz des Controllers. Wird der Controller also durch irgendeine externe Quelle in den Reset gezwungen (insbeesondere durch den Programmer während des brennens), dann gehen die Schieberegister mit in den Reset.
Gibt der Programmer den Controller wieder frei, gilt das auch für die Register.
 
guten abend,

aktuell stand, Matrix mit der 12x12 Hardware läuft, ich kann auch bereits die gewünschten wörter anzeigen.
um nun die Uhrzeit auszuwerten in so etwas wie:

es ist genau
es war gerade
es ist gleich

teile ich die Minuten durch 5 bzw. mit MOD den Restwert.
mit mod bekomme ich die einzelminuten also es ist gerade / gleich / genau.

mit Division durch 5 die 5er Minuten also fünf nach zehn/zwanzig/viertel usw.

hier ist mein Problem mit

fuenfmin = Minute / 5 (beides als Byte) tut es nicht genau so wie ich will. Bascom scheint nicht aufzuwerten

1 / 5 = 0
2 / 5 = 0
3 / 5 = 0
4 / 5 = 0
5 / 5 = 1

ich will das aber gerundet also so:

1 / 5 = 0
2 / 5 = 1
3 / 5 = 1
4 / 5 = 1
5 / 5 = 1

wie bekomme ich das gelöst, braucht ihr noch mehr Daten oder ist halbwegs klar was ich meine.


danke.
 
Bascom scheint nicht aufzuwerten
Auch C oder Pascal würde das nicht. Bei Intergermathematik wird der Rest immer abgeschnitten.
Wie wäre es mit einem Offset von 3?

1 (+3) / 5 = 0
2 (+3) / 5 = 1
3 (+3) / 5 = 1
4 (+3) / 5 = 1
5 (+3) / 5 = 1

SickBoy
 
Hi,

hier ist mein Problem mit

fuenfmin = Minute / 5 (beides als Byte) tut es nicht genau so wie ich will. Bascom scheint nicht aufzuwerten

1 / 5 = 0
2 / 5 = 0
3 / 5 = 0
4 / 5 = 0
5 / 5 = 1

ich will das aber gerundet also so:

1 / 5 = 0
2 / 5 = 1
3 / 5 = 1
4 / 5 = 1
5 / 5 = 1

wie bekomme ich das gelöst, braucht ihr noch mehr Daten oder ist halbwegs klar was ich meine.

Also zuerst ... gerundet wäre deins auch nicht. Dafür müßte das Ergebnis bei >=0,5 hochgehen. Also zB so ...

1 / 5 = 0 (0,2)
2 / 5 = 1 (0,4) -> müßte dann trotzdem 0 sein
3 / 5 = 1 (0,6)
4 / 5 = 1 (0,8)
5 / 5 = 1 (1,0)

2/5 paßt also auch nicht zum Runden. Da der Controller aber mit Integerarithmetik arbeitet schneidet er einfach ab und macht keine arithmetische Rundung. Dafür müßte er mit Fließkommarechnung arbeiten. Das frißt aber wieder ne Menge mehr Speicher und Geschwindigkeit. Du mußt dir also einen anderen Weg überlegen um auf dein gewünschtes Ergebnis zu kommen. Evtl mit ...
If >1 then =1
oder sowas.

Gruß
Dino
 
Hi Tommy,

Wie wäre es alternativ damit?

http://avrhelp.mcselec.com/index.html?round.htm

p.S.: 2 / 5 = 0.4 = 0 ;)

Man beachte ...
Syntax
var = ROUND( x )
Remarks
Var - A single or double variable that is assigned with the ROUND of variable x.
X - The single or double to get the ROUND of.
und damit sind wir bei der von mir angesprochenen Floatingpoint-Arithmetik ;)

hier ist mein Problem mit
fuenfmin = Minute / 5 (beides als Byte) tut es nicht genau so wie ich will. Bascom scheint nicht aufzuwerten
Also arbeitet er mit Integerarithmetik die leider keine Nachkommastellen kennt und damit auch kein 0.4 oder 0.5 runden kann sondern stumpf auf 0 setzt ;)

Um das mit Integerarithmetik machen zu können müßte man die auftretenden Nachkommastellen vorher durch Multiplikation (linksschieben) in den ganzzahligen Bereich verschieben dann ein wenig dazuaddieren (Die Rundungsschwelle) und danach durch Division (rechtsschieben) die Nachkommastellen wieder verschwinden lassen.

Gruß
Dino
 
Bei der ganzzahligen Division verlierst Du die Nachkommastellen, klar.
Fließkomma kostet Dich unnötig viel Platz und Zeit, auch klar.
Du kannst Dich natürlich auch mit Festkomma beschäftigen - also mit irgendeinem vielfachen rechnen. Wenn Du mit vielfachen von 5 rechnest, ergibt Die Division mit 5 immer ganzzahlige Ergebnisse. Allerdings ist die Ermittlung der letzten Stelle (aus dem byte) auch nicht trivial (also der Zehntel-Stelle beim rechnen mit dem zehnfachen zB).

(ich setze mal vorraus, das Du wirklich runden willst, und das mit dem 2/5 da oben ein Fehler war)
Mit Bascom-Mitteln hast Du aber eigentlich auch alles nötige - Du hattest es doch selbst schon genannt:
Die Division liefert Dir (leider nur) den ganzzahligen Anteil.
Modulo (\) liefert Dir den Rest der Division.

Was ist denn bittesehr der Rest?:D

(Anmerkung: leider scheint es keine Möglichkeit zu geben, beide Ergebnisse mit einem Schlag zu erhalten. Das heißt, zur Ermittlung des Quotienten a/b führt Bascom 'n Haufen Code aus, und erhält das ganzzahlige Ergebnis. Danach läßt Du vielleicht den Rest a\b ermitteln - Bascom führt dazu intern (nochmal) quasi(!) denselben Code aus, und liefert jetzt den Rest)

(Anmerkung2: Eigentlich sollte man sich selbst enfach 'ne kleine Routine (lib) schreiben können, die als Ergebnis ganzzahligen Quotienten und Rest ermittelt, und zurückgibt. Das sollte binär eigentlich ähnlich gehen, wie man eben auch im Dezimalsystem schriftlich dividiert. Ohje... das liegt jetzt auch bald dreissig Jahre zurück...)
 
Früher ging das folgendermaßen wenn die Sprache nicht runden konnte ...

a = x * 10 <--- alles um eine Dezimalstelle verschieben
a = a / 5 <=== deine Funktion ========================
a = a + 5 <---- Rundungsschwelle dazuaddieren (ab 0,5 aufrunden)
y = a / 10 <--- bei Integerarithmetik. Sonst y = Int (a / 10) -- alles zurückverschieben


x = 2 <=== Eingangswert
a = x * 10 = 20
a = a / 5 = 4 <=== deine Funktion
a = a + 5 = 9
y = a / 10 = 0 (0.9) <=== Ergebnis


x = 3 <=== Eingangswert
a = x * 10 = 30
a = a / 5 = 6 <=== deine Funktion
a = a + 5 = 11
y = a / 10 = 1 (1.1) <=== Ergebnis


x = 4 <=== Eingangswert
a = x * 10 = 40
a = a / 5 = 8 <=== deine Funktion
a = a + 5 = 13
y = a / 10 = 1 (1.3) <=== Ergebnis


x = 5 <=== Eingangswert
a = x * 10 = 50
a = a / 5 = 10 <=== deine Funktion
a = a + 5 = 15
y = a / 10 = 1 (1.5) <=== Ergebnis


x = 8 <=== Eingangswert
a = x * 10 = 80
a = a / 5 = 16 <=== deine Funktion
a = a + 5 = 21
y = a / 10 = 2 (2.1) <=== Ergebnis


Das ist noch aus Zeiten des ZX81 der keinen ROUND() Befehl kannte.

Gruß
Dino
 
guten abend,

ich weiß jetzt noch nicht ob ihr mir ne hilfe gewesen seid :)

also die variante von dino03 kann ich nachvollziehen und klappt rein mathematisch prima. nur will ich ja die Minuten bis zu 59, ausrechnen. mal zehn passt dann ja auch nicht mehr in mein Byte.
Mein gott ist diese Mathematik lange her, in Excel ist das ja so einfach.

das der uc bei Byte das nachkomma fallen läst erklärt immerhin meine Beobachtung, schon mal wichtig.

aber mal sehen ich tüftle mal noch a bisserl weiter.

gruß
 
und sieh da wenn ich aus dem einen Byte ein word mach (59*10) dann tuts auch.
immerhin ich brauch auch nur 3 Divisionen!! das geht bestimmt noch schlauer.

alles Byte ausser fuenfmin.


Einzelmin = Minute Mod 5
Fuenfmin = Minute * 10
Fuenfmin = Fuenfmin / 5
Fuenfmin = Fuenfmin + 5
Fuenfmin = Fuenfmin / 10


für einen Anfänger!!
naja immerhin tuts mal :)

bin offen für kreative Kritik

gruß
 
und sieh da wenn ich aus dem einen Byte ein word mach (59*10) dann tuts auch.
immerhin ich brauch auch nur 3 Divisionen!! das geht bestimmt noch schlauer.
Klar:
Fuenfmin = Minute+2
Fuenfmin = fuenfmin/5

Hatte übrigens SickBoy auch schon vorgeschlagen, ist aber leider durch die ganzen anderen Beiträge überlesen worden.
 
Stimmt natürlich...
konkreter Algorithmus wäre also:
Divisor durch 2 teilen (schieb), auf den Dividenten addieren und dann die eigentliche Division.

Meine Lösung in ASM wäre ähnlich der schriftlichen Division - nur eben binär - gewesen...
(also den Divisor von links einschieben, jedesmal Compare mit dem Dividenten. Entsprechend dem Carry 'ne null oder eins von rechts in's Ergebnis schieben. Außerdem bei 'ner 1 den Divisor vom Dividenten subtrahieren. Wenn man Durch ist, steht das Ergebnis komplett im Ergebnis-Register - im Dividenten wäre nur noch der Rest (ggf also auch 0). Bis dahin sollte das die normale Division (binär) sein, die der Controller immer macht. Analog zu "Offset berechnen und Addieren (->oben)" könnte ich jetzt den "Rest" (was im Dividenten übrig ist) einmal linksschieben, und mit dem Divisor vergleichen. Ist der Divisor kleiner, wird das Ergebnis nochmals inkrementiert. Sollte vom Aufwand in etwa gleich sein.

Oder gibt es 'ne einfachere Implementierung der Division (die sich zB auf die etwaigen Multiplikationsbefehle stützt)?
 
guten abend,

so danke tatsächlich tut auch mit +2 div5, das meint sogar Excel.

so hier mal der code den ich aktuell habe.
Zur Info: DCF ist noch aus und die Minute wird jede sekunde incr. sonst muss ich so lange warten obs die anzeige passt.
Das ganze ist sicherlich noch zu optimieren, aber immerhin es tut was es soll.
Für tipps bin ich immer offen.

nächstes todo für mich wäre jetzt die select cases in Subs zu verbannen und nur noch zu durchlaufen, wenn es eine "neue" Minute bzw. Stunde gibt.
dann dcf dazu und ne schicke anzeige bis dcf empfang gut ist.

hier der code eines Anfängers :)

gruss und danke bis dahin


Code:
'Meine erste matrix
'ATMEGA8 mit 8mhz ext quarz

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 100
$swstack = 100
$framesize = 100

'--------------  ports init ---------------------

Ledspalten_r Alias Portd
Config Ledspalten_r = Output
Ledspalten_l Alias Portc
Config Ledspalten_l = Output
Dim Zeile As Byte
Zeile = 1
Dim Tick As Byte
Dim Tack As Bit
Dim Setdimm As Byte
Setdimm = 50
Dim OffsetMyStunden As Byte
Dim Offsetminuten As Byte
Dim Offsetticktack As Byte
Dim I As Byte
Dim Ledspalten(12) As Word
Dim Newspalten(12) As Word


Dim C_es_war As Word
Dim C_es_ist As Word
Dim C_gleich As Word
Dim C_genau As Word
Dim C_gerade As Word
Dim C_fuenfmin As Word
Dim C_viertel As Word
Dim C_dreiviertel As Word
Dim C_zehnmin As Word
Dim C_zwanzig As Word
Dim C_nach As Word
Dim C_vor As Word
Dim C_halb As Word
Dim C_drei As Word
Dim C_ein As Word
Dim C_eins As Word
Dim C_sieben As Word
Dim C_elf As Word
Dim C_fuenf As Word
Dim C_zwoelf As Word
Dim C_vier As Word
Dim C_zwei As Word
Dim C_acht As Word
Dim C_neun As Word
Dim C_sechs As Word
Dim C_zehn As Word
Dim C_uhr As Word
Dim C_vor12 As Word
Dim C_nach12 As Word
Dim C_nachts As Word
Dim C_mittag As Word


  C_es_war = &B110111000000
  C_es_ist = &B110000111000
  C_gleich = &B111111000000
  C_genau = &B000000011111
  C_gerade = &B111111000000
  C_fuenfmin = &B000000011110
  C_viertel = &B000011111110
  C_dreiviertel = &B111111111110
  C_zehnmin = &B111100000000
  C_zwanzig = &B000001111111
  C_nach = &B111100000000
  C_vor = &B000011100000
  C_halb = &B000000001111
  C_drei = &B111100000000
  C_ein = &B001110000000
  C_eins = &B001111000000
  C_sieben = &B000001111110
  C_elf = &B111000000000
  C_fuenf = &B001111000000
  C_zwoelf = &B000000011111
  C_vier = &B111100000000
  C_zwei = &B000011110000
  C_acht = &B000000001111
  C_neun = &B011110000000
  C_sechs = &B000000111110
  C_zehn = &B111100000000
  C_uhr = &B000001110000
  C_vor12 = &B000000000111
  C_nach12 = &B111100000000
  C_nachts = &B111111000000
  C_mittag = &B000000111111

Dim Minute As Byte
Dim Mystunde As Byte
Dim Stunde As Byte
Dim Einzelmin As Byte
Dim Fuenfmin As Word
Minute = 0
Stunde = 13



'------------------ init (taster)------------------

Taster1 Alias Pinb.1
Config Taster1 = Input
Portb.1 = 1
Taster2 Alias Pinb.0
Config Taster2 = Input
Portb.0 = 1


'--------------------dcf init-------------------------------

Config Dcf77 = Pinb.1 , Timer = 1 , Check = 1 , Update = 1 , Gosub = Sectic
Config Date = Dmy , Separator = Dot

'------------------------schieberegister int---------------------
Daten Alias Portb.3
Clock Alias Portb.5
Config Daten = Output
Config Clock = Output


'-----------------del all--------------------
Daten = 1

For I = 1 To 12
Clock = 1 : Clock = 0
Next


Offsetminuten = 0
OffsetMyStunden = 0
Offsetticktack = 0



'------------------timer init für multiplex --------------------
Config Timer2 = Timer , Prescale = 64 , Clear Timer = 0
On Compare2 Ledsoff
On Timer2 Ledson
Enable Compare2
Enable Timer2
Ocr2 = 253
Enable Interrupts



Ledspalten(12) = 0
 Tick = 1

Do

   'Debounce Taster1 , 0 , Action1 , Sub
   If Tick = 1 Then
                                                'lcd nur wenn neue sekunde und tick tack anzeige matrix umschalten.
        Tick = 0
        'If Tack = 0 Then Ledspalten(12) = C_nachts
        'If Tack = 1 Then Ledspalten(12) = C_mittag
         Ledspalten(12) = High(minute)

         Gosub Newbild


   End If
  
   Einzelmin = Minute Mod 5
   Fuenfmin = Minute + 2
   Fuenfmin = Fuenfmin / 5
   Mystunde = Stunde
   If Mystunde >= 13 Then Mystunde = Mystunde - 12          '24 in 12 stunden anzeige

   Select Case Einzelmin
      Case 0
       Newspalten(1) = C_es_ist
       Newspalten(2) = C_genau
       Newspalten(3) = 0
      Case 1 To 2
       Newspalten(1) = C_es_war
       Newspalten(2) = 0
       Newspalten(3) = C_gerade
      Case 3 To 4
       Newspalten(1) = C_es_ist
       Newspalten(2) = C_gleich
       Newspalten(3) = 0
      Case Else
      End Select

      Select Case Fuenfmin
      Case 1
       Newspalten(3) = Newspalten(3) Or C_fuenfmin
       Newspalten(4) = 0
       Newspalten(5) = 0
       Newspalten(6) = C_nach
      Case 2
       Newspalten(4) = 0
       Newspalten(5) = C_zehnmin
       Newspalten(6) = C_nach
      Case 3
       Newspalten(4) = C_viertel
       Newspalten(5) = 0
       Newspalten(6) = C_nach

      Case 4
       Newspalten(4) = 0
       Newspalten(5) = C_zwanzig
       Newspalten(6) = C_nach
      Case 5
       Incr Mystunde
       Newspalten(3) = Newspalten(3) Or C_fuenfmin
       Newspalten(4) = 0
       Newspalten(5) = 0
       Newspalten(6) = C_vor Or C_halb
      Case 6
       Incr Mystunde
       Newspalten(4) = 0
       Newspalten(5) = 0
       Newspalten(6) = C_halb
      Case 7
       Incr Mystunde
       Newspalten(3) = Newspalten(3) Or C_fuenfmin
       Newspalten(4) = 0
       Newspalten(5) = 0
       Newspalten(6) = C_nach Or C_halb
      Case 8
       Incr Mystunde
       Newspalten(4) = 0
       Newspalten(5) = C_zwanzig
       Newspalten(6) = C_vor
      Case 9
       Incr Mystunde
       Newspalten(4) = C_dreiviertel
       Newspalten(5) = 0
       Newspalten(6) = 0
      Case 10
       Incr Mystunde
       Newspalten(4) = 0
       Newspalten(5) = C_zehnmin
       Newspalten(6) = C_vor
      Case 11
       Incr Mystunde
       Newspalten(3) = Newspalten(3) Or C_fuenfmin
       Newspalten(4) = 0
       Newspalten(5) = 0
       Newspalten(6) = C_vor
      Case 12
       Incr Mystunde
       Newspalten(3) = 0
       Newspalten(4) = 0
       Newspalten(5) = 0
       Newspalten(6) = 0
      Case Else
      End Select



      Select Case MyStunde
      Case 0 Or MyStunde = 12
       Newspalten(7) = 0
       Newspalten(8) = C_zwoelf
       Newspalten(9) = 0
       Newspalten(10) = 0
       Newspalten(11) = 0
      Case 1
       Newspalten(7) = C_eins
       Newspalten(8) = 0
       Newspalten(9) = 0
       Newspalten(10) = 0
       Newspalten(11) = 0
      Case 2
       Newspalten(7) = 0
       Newspalten(8) = 0
       Newspalten(9) = C_zwei
       Newspalten(10) = 0
       Newspalten(11) = 0
      Case 3
       Newspalten(7) = C_drei
       Newspalten(8) = 0
       Newspalten(9) = 0
       Newspalten(10) = 0
       Newspalten(11) = 0
      Case 4
       Newspalten(7) = 0
       Newspalten(8) = 0
       Newspalten(9) = C_vier
       Newspalten(10) = 0
       Newspalten(11) = 0
      Case 5
       Newspalten(7) = 0
       Newspalten(8) = C_fuenf
       Newspalten(9) = 0
       Newspalten(10) = 0
       Newspalten(11) = 0
      Case 6
       Newspalten(7) = 0
       Newspalten(8) = 0
       Newspalten(9) = 0
       Newspalten(10) = C_sechs
       Newspalten(11) = 0
      Case 7
       Newspalten(7) = C_sieben
       Newspalten(8) = 0
       Newspalten(9) = 0
       Newspalten(10) = 0
       Newspalten(11) = 0
      Case 8
       Newspalten(7) = 0
       Newspalten(8) = 0
       Newspalten(9) = C_acht
       Newspalten(10) = 0
       Newspalten(11) = 0
      Case 9
       Newspalten(7) = 0
       Newspalten(8) = 0
       Newspalten(9) = 0
       Newspalten(10) = C_neun
       Newspalten(11) = 0
      Case 10
       Newspalten(7) = 0
       Newspalten(8) = 0
       Newspalten(9) = 0
       Newspalten(10) = 0
       Newspalten(11) = C_zehn
      Case 11
      Newspalten(7) = 0
       Newspalten(8) = C_elf
       Newspalten(9) = 0
       Newspalten(10) = 0
       Newspalten(11) = 0
      Case Else
      End Select



Loop



End



Ledson:


   If Zeile = 1 Then Daten = 0                              ' für erste zeile eine 1 ins schieberegister
   If Zeile > 1 Then Daten = 1                              ' mit 0 die obige eins weiterschieben.
   Clock = 1 : Clock = 0                                    ' clk impuls
   Ledspalten_r = Low(ledspalten(zeile))
   Ledspalten_l = High(ledspalten(zeile))
   Incr Zeile                                               ' nächste zeile

   If Zeile = 13 Then Zeile = 1
   Timer2 = 40


Return



Ledsoff:

   Ledspalten_r = 0
   Ledspalten_l = 0

Return

Newbild:                                                    ' neues LED muster laden


       For I = 1 To 11
           Ledspalten(i) = Newspalten(i)
       Next




Return

Sectic:


   Incr Tick                                                ' tick tack bit
   Toggle Tack
   Incr Minute                                              ' minuten und MyStunden nur zum test ohne DCF
   If Minute = 60 Then
      Minute = 0
      Incr Stunde
      If Stunde = 25 Then Stunde = 0
   End If







Return

Setdimmer:

     Setdimm = Setdimm + 50
     If Setdimm > 250 Then Setdimm = 0

     Ocr2 = Setdimm
Return




Action1:

      Incr Minute



Return
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)