PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Propeller-Clock aber eigentlich Drehlicht und die Timer ?



Roberto
15.01.2006, 13:22
Hallo Leute

Schlage mich gerade mit den leidigen Timer rum :-(

Irgendwie kapiere ich das noch nicht..

Habe einen Rotor mit 8 Leds am Ende, die von einem Mega8 getaktet werden.
Das ganze dreht sich.
Für die Position ist auch ein Magnetsensor oben , der , wenn er über den Magnet fliegt, einen Pin am AVR gegen Masse zieht.
(Derzeit läuft es mit Int0, geht aber auch ohne Interupt's)

Habe sogar schon ein Wort in die Luft schreiben können :-)

Jetzt möchte ich aber gerne die Schreibgeschwindigkeit mit der Umdrehungsdauer syncronisieren.
(Damit bei jeder Geschwindigkeit die Anzeige auch am rechten Platz ist)

Komme da aber irgendwie mit den ganzen Timern nicht zurande...
(Grundverständnis)

Dachte mir das eigentlich so:
Nehme Timer1
Wenn der Magnetsensor schaltet , startet Timer1
Wenn Magnetschalter nochmal schaltet, wird der Timer1-wert gespeichert und Timer1 auf 0 gesetzt.
Timer1 läuft weiter, bis Schalter wieder schaltet u.s.w.

Diese Timer1-zeit ist nun eine Umdrehung vom Rotor.
Diese müsste ich dann durch alle Spalten teilen.
z.B. durch 360 (Winkelgradl)
Dann hätte ich die Zeit für z.B. einen Winkelgrad oder Eine Spalte.

Jetzt habe ich schon viele Artikel hier durchgelesen..
Frequenzzähler u.s.w.

Da wird aber immer ein Interupt genommen, der dann einen Timer schaltet (zurücksetzt) u.s.w.

Kann ich das den nicht gleich auch nur mit einem Counter machen...?
Oder was macht eigentlich ein Counter ?? ](*,)

(habe da auch das Buch von Kühnel. (beispiel Counter0.bas)
Da stehe ich aber auch irgendwie im Wald :-) )

Oder kann man einen Timer auch extern Trigern ?

Bitte um Hiiiilllffffeeee :-)

Bluesmash
15.01.2006, 13:27
hallo!

ich kann dir zwar nicht viel über die timer erzählen aber mich würde dein aufbau des rotors mit den led's intressieren! vorallem die kontakte der leds über den rotor! oder kanst du mal ein bild posten?

gruss bluesmash

Roberto
15.01.2006, 13:46
Hallo Bluesmash

Dein Wunsch ist mir Befehl ;-)

Roberto
15.01.2006, 13:49
mmmhhh. scheinen nur drei Bilder zum Anhängen zu gehen..
Hier das vierte..

Du fragst vermutlich wegen den Schleifern... :-k

Da hatte ich aus meiner Bastelkiste noch was gefunden...
Über die Welle vom Motor kam so eine Gummiwalze als Isolierung.
Auf die dann eine Messinghülse.
Die Messinghülse habe ich auf die Platine vom Rotor gelötet und bildet die +5V

Für Minus habe ich vorne auf der Welle einen Schleifer.
Auf der anderen Seite vom Motor wieder mit einem Schleifer zur Versorgung (Masse)

Bluesmash
15.01.2006, 14:20
wow das sieht ja super aus! und das geschriebene ist erstaunlich symetrisch! als nächstes projekt baue ich mir auch so ein teil :) und die spannungsübertragung hast du auch genial gelöst! und ist auch relativ einfach zu bauen. wie schnell dreht denn dein motor? was hast du für erfahrungen gesammelt mit den drehzahlen?

gruss bluesmash

Roberto
15.01.2006, 15:59
wie schnell dreht denn dein motor?
Weis nicht, müsste ich erst messen.
Ist aber nicht so schnell...


was hast du für erfahrungen gesammelt mit den drehzahlen?
?
Merke nur, wenn ich schneller drehe, wird natürlich die Unwucht grösser...

Möchte halt mal probieren, das die Position bei unterschiedlicher Drehzahl auch gleich bleibt...
Darum meine Frage zu den Timer-Sachen..
Vielleicht weis da ja jemand etwas ???

Ein toller Link , wo ich in die Richtung hinwill, ist der:
http://www.spacewriter.com/iballanimations.asp?menuproduct=IB
siehe links bei den Produkten:
Fansreen, wallscreen , u.s.w..

Das stellt sich dann noch die weitere Frage, wie weit kann ich mit
z.B. Schieberegister und Mega8, die Ledanzahl erhöhen ;-)
Aber das ist eine andere Geschichte ;-)

Ratber
15.01.2006, 21:56
Ja sieht doch schon gut aus.


Zum Timing:

Der Interrupt ist eben Zeitgenau.
Sobald er auftritt wird in die Int-Routine gesprungen.
Programmtimings nur per Schleifen laufen immer etwqs auseinander und ergeben das berümte Zittern.




Zur Energieübertragung:

Auf Dauer wird der Schleifer nicht halten da bietet sich nen rotiernder Trafo an.

Später kommt ja sicher noch ne Datenübertragung hinzu dann mußte die auch noch übertragen.

Ich hab das Kapazitiv über die Achse erledigt.
Es geht ber auch per Infrarot oder Funk.

Roberto
15.01.2006, 22:07
Hallo Ratgeber

Kann ich einen Timer extern Trigern oder brauche ich dazu immer einen Interrupt (z.B. Int0) der mir in der ISR dann den Timer zurücksetzt ?

Plage mich gerade mit einem Counter herrum, aber da mache ich einen eigenen Thread auf..

Hast Du Fotos von deinem Propeller ? :-)

Ratber
15.01.2006, 22:19
Hallo Roberta

Fotos hab ich keine und kann auch keine mehr machen weil das Teil nicht mehr am stück existiert (Welle hat gefressen,der Ruck hats vom Tisch gefegt,Totalschaden,zerlegt und Rest =Tonne,Ich = Rest des Abends Sauer.Pech.)
War aber nix besonderes.
8 LED's Zweifarbig.
Nur mal zum Spielen.



Kann ich einen Timer extern Trigern oder brauche ich dazu immer einen Interrupt (z.B. Int0) der mir in der ISR dann den Timer zurücksetzt ?

Nö,mußte schon so machen wie du beschrieben hast.
Der Trick ist herauszufinden wieviele Systemtakte bis zum rücksetzen des ISR vergeht.

Geht aber auch schon im Simulator.

zb.
ausführung stoppen
Taktzähler nullieren
Int0 setzen
Break beim ISR setzen (Davo oder danach ist deine Sache).
Weiterlaufen lassen
Beim Breagkj Zähler ablesen.
Fertig.
Mit dem Wert kannste dann arbeiten

Roberto
15.01.2006, 23:30
Habs jetzt mit INT0 und timer geschaft :-)


ISR_:
B = Timer1
Timer1 = 0
Return

Roberto
16.01.2006, 14:04
Halllo

Habe jetzt probiert... aber ganz so wie ich mir das gedacht hatte, läuft es leider nicht. :-( (regelt nicht so recht)

Irgendwie bräuchte ich da zwei 16-Bit Timer... :-k

Hier mal der Code zum begutachten 8-[



'--------Drehlicht-----V1.07---------------
' 8MHz RC Intern

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


'---Config Port's -----------------
Config Portb = Output
Portb = 255

Config Portd = Input
Portd = 255

'---config Int0------
Config Int0 = Falling
Enable Int0
On Int0 Kontakt

'--- Config Timer1 ----
Config Timer1 = Timer , Prescale = 1024
Enable Timer1

'--- Config Timer0 ------
Config Timer0 = Timer , Prescale = 1
Enable Timer0



Enable Interrupts
Load Timer0 , 255


Dim Drehzeit As Word
Dim Spaltenzeit As Byte
Dim Auftrag As Word

Auftrag = 0

'--------------------Hauptprogramm--------------------------

Do

Loop

End




'==============================Unterprogramme===== ==============================
'--------------ISR von Int0--------------------
Kontakt:
Drehzeit = Timer1
Timer1 = 0
Spaltenzeit = Drehzeit / 360

Auftrag = 0
Return


'------------ISR von Timer0 --------------------
Spalten:
Load Timer0 , Spaltenzeit

If Auftrag < 50 Then
Toggle Portb
Incr Auftrag
End If

Return


Was meint ihr dazu ?

Drehzahl ist 1000 U/min
Quarz = 8MHz

Roberto
16.01.2006, 16:53
Habs jetzt ein bisschengeändert.


'--------Drehlicht-----V1.07---------------
' 8MHz RC Intern

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


'---Config Port's -----------------
Config Portb = Output
Portb = 255

Config Portd = Input
Portd = 255

'---config Int0------
Config Int0 = Falling
Enable Int0
On Int0 Kontakt

'--- Config Timer1 ----
Config Timer1 = Timer , Prescale = 1024
Enable Timer1

'--- Config Timer0 ------
Config Timer0 = Timer , Prescale = 8
Enable Timer0
On Timer0 Spalten


Enable Interrupts
Load Timer0 , 255


Dim Drehzeit As Word
Dim Spaltenzeit As Byte
Dim Auftrag As Word

Auftrag = 0

'--------------------Hauptprogramm--------------------------

Do

Loop

End




'==============================Unterprogramme===== ==============================
'--------------ISR von Int0--------------------
Kontakt:
Drehzeit = Timer1
Timer1 = 0
Spaltenzeit = Drehzeit / 2

Auftrag = 0
Return


'------------ISR von Timer0 --------------------
Spalten:
Load Timer0 , Spaltenzeit

If Auftrag < 100 Then
Toggle Portb
Incr Auftrag
End If

Return


Der Simulator wollte kein Byte bei der Variabel : Spaltenzeit.
Bei AVR macht das aber nix aus. (Darum wieder auf Byte geändert)

Haltet jetzt so ungefähr die Lage. Aber nicht schön :-(
Wenn man den Motor in der Drehzahl verändert, merkt man genau wo er auf oder Abrundet .....

Ein zweiter 16bit Timer wäre da wohl viel genauer ](*,)

Ratber
16.01.2006, 17:03
Nimm doch einfach nen M64 oder größer dann haste was de suchst.

Roberto
16.01.2006, 17:24
Wie war es den bei dir ? (die Schrift)
Welcher AVR ?
Wie war dein Programm ? (Prinzip)

Ratber
16.01.2006, 17:41
Schrifft:

Was meinste ?
Der Propeller war umlaufend also genaugenomen eine "Rotor-Clock"
Die Schrifft war relativ Stabil.
Keine Spielereien.
Bevor ich weitergewkommen bin lag das Teil am Boden.

Controller:

Ich hatte nen M128 drauf (Etwas Oversized.Lag gerade so rum)


Programmprinzip:

Eigentlich wie alle anderen.
Die Anzeige wird per Sync (Hallsensor) getriggert,die Drehzahl lag stabil bei 600upm.

Allerdings hatte ich an einer Datenübertragung gearbeitet um den Text per Serieller Schnittstelle immer passend ändern zu können.

Is aus obigem Grund ebenfalls nur im Rohbau gewesen.

Bluesmash
16.01.2006, 21:34
hallo roberto!
ich hab mir jetzt auch so ein teil gebastelt :) nach langem herumprobieren mit den timern ohne erfolg, hab ich mal dein prog geladen... wenn ich die richtige drehzahl mal gefunden habe, habe ich etwa auf dem halben durchmesser schöne punkte nacheinander aber sie springen ca 3mm hin und her... sobald die drehzahl zu gering wird hab ich nur noch striche ringsum...
aber das müste man doch noch verbessern können...

gruss bluesmash

Roberto
16.01.2006, 22:56
Hallo

Ich verstehe das auch nicht ganz....
Aber irgendwie habe ich mich jetzt da festgefressen ;-)

Vielleicht weis da jemand mehr ??

Also:
minimale Umdrehungen sind 500 U/min = 8,3 U/sek
Mittelere Umdrehungen sind 1000 U/min = 16,6 U/sek
Höchste Umdrehungen sind 1500 U/min = 25 U/sek.

Zwischen min und Max sollte es zumindest reglen!

Wenn ich jetzt für den Timer1 einen Prescaler mit 8 nehme, wären das für 1000 U/min, 60240,96 Takte pro Umdrehung und pro sek.

Jetzt teile ich die Takte pro Umdrehung durch 510, damit ich im Berreich vom Timer0 bleibe (1-256)

Also bei 1000 U/min, wäre dann ein Strich: 118,11 Takte vom Timer0

Wenn ich aber unter der ISR vom Timer0 einen Wert von 100 eintrage.
Also zeichne 100 Striche, dann füllt das schon fast den ganzen Kreis.

Eigentlich müsste ich ja 510 Striche Auftragen können ?!

Hier nochmal der aktuelle Code:


'--------Drehlicht-----V1.08---------------
' 8MHz RC Intern

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


'---Config Port's -----------------
Config Portb = Output 'Leds
Portb = 255

Config Portd = Input
Portd = 255

'---config Int0------
Config Int0 = Falling
Enable Int0
On Int0 Kontakt

'--- Config Timer1 ----
Config Timer1 = Timer , Prescale = 8
Enable Timer1

'--- Config Timer0 ------
Config Timer0 = Timer , Prescale = 8
Enable Timer0
On Timer0 Spalten


Enable Interrupts
Load Timer0 , 255


Dim Drehzeit As Single
Dim Spaltenzeit As Word
Dim Auftrag As Single

Auftrag = 0
Timer1 = 0
'--------------------Hauptprogramm--------------------------

Do

Loop

End




'==============================Unterprogramme===== ==============================
'--------------ISR von Int0--------------------
Kontakt:
Drehzeit = Timer1
Timer1 = 0
Spaltenzeit = Drehzeit / 510

Auftrag = 0
Return


'------------ISR von Timer0 --------------------
Spalten:
Load Timer0 , Spaltenzeit

If Auftrag < 100 Then
Toggle Portb
Incr Auftrag
End If

Return


Vielleicht kan sich jemand dieser Denkaufgabe stellen :-)

@Bluemash
Für dich habe ich noch den alten Code.
Ganze einfach! Startet einfach ab Kontakt vom Schalter und schreibt dann den Namen Andre in die Luft (Mein Junior :-) )
Geht für das eigentlich recht gut.
Mich störte nur, dass die Weite von der Drehzahl abhängt.


'--------Drehlicht-----V1.04---------------
' 8MHz RC Intern
'
'
' schreibt ANDRE !!!!!!



$regfile = "m8def.dat"
$crystal = 8000000


'---Config Port's -----------------
Config Portb = Output
Portb = 255


Config Portd = Input
Portd = 255




Dim A As Byte
Dim B As Byte
Dim B1 As Byte
A = 1


'--------------------Hauptprogramm--------------------------



Do

If Pind.2 = 0 Then
Waitms 5

Restore Xxx
'7*Zeichen lesen
For A = 1 To 7
'8*Spalten pro Zeichen lesen
For B = 1 To 8
Read B1
B1 = 255 - B1
Portb = B1
Waitus 20
Next B
Portb = 255 'Für Abstand zwischen den Zeichen
Waitus 200
Next A

End If


Portb = 255



Loop

End




'Red Message
Xxx:
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 31 , 36 , 68 , 132 , 132 , 68 , 36 , 31 'A
Data 255 , 64 , 32 , 16 , 8 , 4 , 2 , 255 'N
Data 255 , 129 , 129 , 129 , 129 , 129 , 66 , 60 'D
Data 255 , 136 , 136 , 136 , 136 , 140 , 82 , 33 'R
Data 255 , 137 , 137 , 137 , 137 , 137 , 129 , 129 'E
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen

Bluesmash
17.01.2006, 11:21
danke! ich werde es heute abend mal ausprobieren :) per zufall stimmen alle ein und ausgänge bei mir überein :) aber als erstes muss ich mal die drehzahl erfassen hast du da eine gute idee? ich dachte ich lass ihn drehen und immer so nach 10 umdrehungen lass ich eine led mehr leuchten, zeit messen, led's zählen --> drehzahl... und dann mach ich mich mal an die timer, mal schauen ob man es noch genauer hinkriegt... das problem ist wahrscheinlich schon dass der mega8 nicht 2 16bit timer hat... :(
das mit der tabelle für die einzelnen buchstaben finde ich eine super idee! ich hätte es wahrscheinlich viel umständlicher gemacht...

gruss bluesmash

Roberto
17.01.2006, 12:01
Hallo Bluesmash

Das mit den Buchstaben habe ich mir irgendwo abgeschaut.
Ich glaube auf der home von MCS...


Derzeit stutiere ich gerade, wie ich einen String in die Spalten auftragen kann ????????????????????

Habe noch keinen so richtigen Ansatz dafür :-(

Irgendwie in die Richtung, dass ich ein Array habe für alle Spalten...

Wenn ich einen String habe, müsste ich da zuerst dann die Zeichen analysieren, aus meinem Zeichensatz dann ein gleiches Zeichen suchen und die entsprechenden Werte dann ins Array schreiben...
Der Timmer läuft das Array durch.


Habe aber keine Ahnung ob der Lösungsansatz passt und wie ich das im BAscom umsetze ???? :-k :-k :-k :-k

Bluesmash
17.01.2006, 12:15
ja darüber habe ich auch schon nachgedacht, aber ich habe auch noch nicht die perfekte idee, ausser mit if..then verknüpfungen für jeden buchstaben und ein array für jedes zeichen das dargestellt werden soll, und danach beim abspielen werden eifach die arrays durchlaufen...

Bluesmash
17.01.2006, 18:53
so ich hab jetzt mal die timer anhand der drehzahl richtig eingestellt und es funktioniert jetzt nicht schlecht die schrift wackelt so ca 2-3mm... die timer funktionieren ab ca. 800 U/min und nach oben praktisch unbegrenzt (bis mein drehflügel auseinanderfliegt...)

hier mein vorschlag für die zeichenprogrammierung, für jedes Zeichen ein array mit 5 Spalten (meine Zeichen sind 7*5 Punkte) das währen bei mir ca 30 arrays aber es wird relativ aufwändig zum programmieren, und dann kommt die zeichenerkennung noch dazu...

kann man nicht irgendwie ein array definieren so in dieser art:

x(i)
Incr x
Incr i

damit man beide zahlen hochzählen kann....

hier mal mein prog (es zeigt die ersten 3 Buchstaben von HALLO) :):


$regfile = "m8def.dat"
$crystal = 8000000

$framesize = 512
$swstack = 512
$hwstack = 512

Config Portb = Output

Dim Umdrehung As Word
Dim Spaltenzeit As Byte
Dim I As Byte
Dim X As Byte


Dim 0(5) As Byte
Dim 1(5) As Byte
Dim 2(5) As Byte

Config Int0 = Falling
On Int0 Int0isr
Enable Int0

Config Timer0 = Timer , Prescale = 64
On Timer0 Timer0isr Nosave
Enable Timer0

Config Timer1 = Timer , Prescale = 8
On Timer1 Timer1isr Nosave
Enable Timer1

Enable Interrupts

Start Timer0





Do
0(1) = &B00000001
0(2) = &B11101111
0(3) = &B11101111
0(4) = &B11101111
0(5) = &B00000001

1(1) = &B10000001
1(2) = &B01101111
1(3) = &B01101111
1(4) = &B01101111
1(5) = &B10000001

2(1) = &B00000001
2(2) = &B11111101
2(3) = &B11111101
2(4) = &B11111101
2(5) = &B11111101
Loop



Int0isr:
Umdrehung = Timer1
Umdrehung = Umdrehung / 1200
Spaltenzeit = Umdrehung
Timer1 = 0
I = 0
X = 0
Return


Timer0isr:
Load Timer0 , Spaltenzeit
Incr I
If I > 5 Then
I = 0
Incr X
Portb = 255
Else
If X = 0 Then
Portb = 0(i)
Elseif X = 1 Then
Portb = 1(i)
Elseif X = 2 Then
Portb = 2(i)
End If
End If

Return


Timer1isr:
I = 0
X = 0
Return


--EDIT--

und so siehts nun aus:

Vogon
17.01.2006, 21:39
kann man nicht irgendwie ein array definieren so in dieser art:

x(i)
Incr x
Incr i

damit man beide zahlen hochzählen kann....


Da ich noch nix mit dem AVR-Basic gemacht habe will ich mich auch nicht so weit aus dem Fenster legen. :-b
Aber gibt es da keine Mehrdimensionle Arrays ?



x(i,j)

x(1,1) = &B00000001
x(1,2) = &B11101111
x(1,3) = &B11101111
x(1,4) = &B11101111
x(1,5) = &B00000001

x(2,1) = &B10000001
x(2,2) = &B01101111
x(2,3) = &B01101111
x(2,4) = &B01101111
x(2,5) = &B10000001

x(3,1) = &B00000001
x(3,2) = &B11111101
x(3,3) = &B11111101
x(3,4) = &B11111101
x(3,5) = &B11111101


Oder ein Array und rechnest dir die Position aus :-$


x(i)
chr = x(5*j + i)
x(01) = &B00000001
x(02) = &B11101111
x(03) = &B11101111
x(04) = &B11101111
x(05) = &B00000001

x(06) = &B10000001
x(07) = &B01101111
x(08) = &B01101111
x(09) = &B01101111
x(10) = &B10000001

x(11) = &B00000001
x(12) = &B11111101
x(13) = &B11111101
x(14) = &B11111101
x(15) = &B11111101

Bluesmash
17.01.2006, 21:59
@vogon: ich hab mich jetzt noch ein bisschen informiert und es gibt keine mehrdimensionale arrays unter bascom... leider...

ich habe mich jetzt für folgende variante entschieden umd die Zeichen des strings ind die anzuzeigenden spalten zu bekommen:


$regfile = "m8def.dat"
$crystal = 8000000

$framesize = 512
$swstack = 512
$hwstack = 512

Config Portb = Output

Dim Umdrehung As Word
Dim Spaltenzeit As Byte
Dim A As Byte
Dim X As Byte

Dim I As Byte
Dim Anzeige As String * 30
Dim Zeichen As String * 1
Dim Spalte(150) As Byte
Dim Laenge As Byte
Dim Spalten As Byte

Config Int0 = Falling
On Int0 Int0isr
Enable Int0

Config Timer0 = Timer , Prescale = 64
On Timer0 Timer0isr
Enable Timer0

Config Timer1 = Timer , Prescale = 8
On Timer1 Timer1isr
Enable Timer1

Enable Interrupts

Start Timer0


Anzeige = "ABCDEFGHIJKLO"


Do

If I = Laenge Then
I = 0
X = 0
End If

Incr I

Zeichen = Mid(anzeige , I , 1)
Laenge = Len(anzeige)
Spalten = Laenge * 6

If Zeichen = "A" Then
Incr X
Spalte(x) = &B10000001
Incr X
Spalte(x) = &B01101111
Incr X
Spalte(x) = &B01101111
Incr X
Spalte(x) = &B01101111
Incr X
Spalte(x) = &B10000001
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "B" Then
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B01101101
Incr X
Spalte(x) = &B01101101
Incr X
Spalte(x) = &B01101101
Incr X
Spalte(x) = &B10010011
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "C" Then
Incr X
Spalte(x) = &B11000111
Incr X
Spalte(x) = &B10111011
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "D" Then
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B10111011
Incr X
Spalte(x) = &B11000111
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "E" Then
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B01101101
Incr X
Spalte(x) = &B01101101
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "F" Then
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B01101111
Incr X
Spalte(x) = &B01101111
Incr X
Spalte(x) = &B01111111
Incr X
Spalte(x) = &B01111111
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "G" Then
Incr X
Spalte(x) = &B10000011
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B01101101
Incr X
Spalte(x) = &B01101101
Incr X
Spalte(x) = &B01100011
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "H" Then
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B11101111
Incr X
Spalte(x) = &B11101111
Incr X
Spalte(x) = &B11101111
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "I" Then
Incr X
Spalte(x) = &B11111111
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B11111111
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "J" Then
Incr X
Spalte(x) = &B11111011
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B01111111
Incr X
Spalte(x) = &B11111111
Incr X
Spalte(x) = &B11111111
End If

If Zeichen = "K" Then
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B11101111
Incr X
Spalte(x) = &B11010111
Incr X
Spalte(x) = &B10111011
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B11111111
End If


If Zeichen = "L" Then
Incr X
Spalte(x) = &B00000001
Incr X
Spalte(x) = &B11111101
Incr X
Spalte(x) = &B11111101
Incr X
Spalte(x) = &B11111101
Incr X
Spalte(x) = &B11111101
Incr X
Spalte(x) = &B11111111
End If



If Zeichen = "O" Then
Incr X
Spalte(x) = &B10000011
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B01111101
Incr X
Spalte(x) = &B10000011
Incr X
Spalte(x) = &B11111111
End If

Loop



Int0isr:
Umdrehung = Timer1
Umdrehung = Umdrehung / 1200
Spaltenzeit = Umdrehung
Timer1 = 0
A = 0
Return


Timer0isr:
Load Timer0 , Spaltenzeit
Incr A
If A > Spalten Then
Portb = 255
Else
Portb = Spalte(a)
End If
Return


Timer1isr:
I = 0
X = 0
Return

Roberto
17.01.2006, 23:16
Hallo Tüftler :-)

Hab jetzt die alte Version und ein paar Variablen durch Word ersetzt.
Ging dann nicht so schlecht :-)

Mein Code schaut jetzt so aus...



'--------Drehlicht-----V1.11---------------
' 8MHz RC Intern

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


'---Config Port's -----------------
Config Portb = Output 'Leds
Portb = 255

Config Portd = Input
Portd = 255

'---config Int0------
Config Int0 = Falling
Enable Int0
On Int0 Kontakt

'--- Config Timer1 ----
Config Timer1 = Timer , Prescale = 8
Enable Timer1

'--- Config Timer0 ------
Config Timer0 = Timer , Prescale = 8
Enable Timer0
On Timer0 Spalten


Enable Interrupts
Load Timer0 , 255


Dim Drehzeit As Long
Dim Spaltenzeit As Word
Dim B1 As Byte

Dim Array(350) As Byte
Dim Array_zaehler As Word
Dim A As Word
Dim B As Word
Dim C As Byte


Dim Wort As String




Timer1 = 0
Array_zaehler = 0
C = 254




'--------------------Hauptprogramm--------------------------

Do
Restore Xxx
For A = 1 To 350
Read B1
B1 = 255 - B1
Array(a) = B1
Next A


Waitms 10

For A = 1 To 350
Array(a) = 255
Next A

Waitms 5



Wort = "Andre"




Loop

End




'==============================Unterprogramme===== ==============================
'--------------ISR von Int0--------------------
Kontakt:
Drehzeit = Timer1
Timer1 = 0
Spaltenzeit = Drehzeit / 510


Array_zaehler = 0
Return


'------------ISR von Timer0 --------------------
Spalten:
Load Timer0 , Spaltenzeit

Portb = 255
If Array_zaehler < 350 Then
Incr Array_zaehler
Portb = Array(array_zaehler)
End If

Return



Xxx:

Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 31 , 36 , 68 , 132 , 132 , 68 , 36 , 31 'A
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 255 , 64 , 32 , 16 , 8 , 4 , 2 , 255 'N
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 255 , 129 , 129 , 129 , 129 , 129 , 66 , 60 'D
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 255 , 136 , 136 , 136 , 136 , 140 , 82 , 33 'R
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 255 , 137 , 137 , 137 , 137 , 137 , 129 , 129 'E
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen



Mein Ansatz ist jetzt so..
Ich trage z.B. 350 Spalten auf.
Mache ein Array mit 350 Stellen.

Der Rotor trägt einfach immer das Array auf, egal was drinnen steht.

Derzeit lese ich mit einer Schleife das Wort aus den Daten in das Array ein.

Mehrfaches Array kenne ich nicht und würd so wohl auch nix bringen ?!
(War schon froh, dass das mit einem Array ging ;-) )

Später sollte eine Schleife einen String zerlegen und die Buchstaben dann aus dem selbstgemachten (puu...) Zeichensatz suchen..
und dann halt einfach in das Array schreiben..

Derzeit ist der Name an und einmal aus... (Versuch)

Habe auch schonmal probiert den Kreis nach aussen wandern zu lassen und wieder rein .
(Schleife mit rotate.. und ins Array)

Habe nur gemerkt, dass das Waitms... sehr von den Timmern aufgehalten wird und dass man auch eine Verzögerung im Aufbau sehen kann.(Led's)

Hängt auch von der Rotor Geschwindigkeit ab.
Vermutlich weil die Timer dann öfter zum Zug kommen...


Ps.:
Die Idee mit den Zeichensatz ist gut
Meine , dass so gleich mit 1 und 0 in das Programm zu schreiben.
Ich hatte das umständlicher gemacht.
Hatte mir dazu eine Excel Seite gemacht, dass mir das ausrechnet..

Hast Du den Zeichensatz selber gemacht ?
Willst Du dann auch zwischen klein und Grossschrift unterscheiden ?

Darf ich deinen Zeichensatz verwenden ?! :-)

Vogon
17.01.2006, 23:47
... und die Buchstaben dann aus dem selbstgemachten (puu...) Zeichensatz suchen..
Hier sind Zeichenzätze und Programme zum erstellen
http://www.sxlist.com/techref/datafile/charsets.htm

Dein Array halte ich für besser. So kannst du auch Proportional-Schrift und kleine Bilder zeigen. O:)

Roberto
18.01.2006, 10:22
Hallo Vogon

Danke für den Link

Leider ist auf der Seite der 7*5 Schriftsatz, nur ein 6*5 :-(
Der Link von 8*6 geht leider nicht.

Hast Du noch andere Links zu dem Thema ?
Beim Googeln finde ich leider nix..

Vogon
18.01.2006, 11:35
... Hast Du noch andere Links zu dem Thema ?
Beim Googeln finde ich leider nix..
Such mal nach Character Generator ROM 8-[
In den Uralt-Computern, und Terminals hat man solche Chips eingebaut. Auch in den Druckern sind sie zu finden. :idea:
http://www.atariarchives.org/cgp/Ch02_Sec04.php

Roberto
18.01.2006, 15:15
Hallo

Habe gesucht, aber nix vernünftiges gefunden :-(
Bei ein paar passte der Code nicht..
Werde mir den wohl selber machen.

@bluesmash

Habe den Code jetzt so:


'--------Drehlicht-----V1.12---------------
' 8MHz RC Intern

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


'---Config Port's -----------------
Config Portb = Output 'Leds
Portb = 255

Config Portd = Input
Portd = 255

'---config Int0------
Config Int0 = Falling
Enable Int0
On Int0 Kontakt

'--- Config Timer1 ----
Config Timer1 = Timer , Prescale = 8
Enable Timer1

'--- Config Timer0 ------
Config Timer0 = Timer , Prescale = 8
Enable Timer0
On Timer0 Spalten


Enable Interrupts
Load Timer0 , 255


Dim Drehzeit As Long
Dim Spaltenzeit As Word
Dim B1 As Byte

Dim Spalte(350) As Byte
Dim Array_zaehler As Word



Dim A As Word
Dim B As Word
Dim C As Byte

'Saetze
Dim Satz As String * 45
Dim Zeichen As String * 1
Dim Asc_zeichen As Byte
Dim Satzlaenge As Word
Dim X As Word 'Spaltenzaehler für Zeichen auftragen



Timer1 = 0
Array_zaehler = 0
C = 254
X = 0



'--------------------Hauptprogramm--------------------------
For X = 1 To 350 'Array Löschen
Spalte(x) = 255
Next X
X = 0
'--------------------------------------------------

Do

Satz = "A A ABH AA AAAA AA A A AAA A"
Gosub Auswerten

Waitms 5
For X = 1 To 350 'Array Löschen
Spalte(x) = 255
Next X
Waitms 5

Satz = "HHHHBBBAA A AA B"
Gosub Auswerten

Waitms 5
For X = 1 To 350 'Array Löschen
Spalte(x) = 255
Next X

Waitms 10


Loop


End




'==============================Unterprogramme===== ==============================
'--------------ISR von Int0--------------------
Kontakt:
Drehzeit = Timer1
Timer1 = 0
Spaltenzeit = Drehzeit / 510
Array_zaehler = 0
Return


'------------ISR von Timer0 --------------------
Spalten:
Load Timer0 , Spaltenzeit

Portb = 255 'Lösche Spalte
If Array_zaehler < 350 Then
Incr Array_zaehler
Portb = Spalte(array_zaehler) 'Werte auf Rotor auftragen
End If

Return





'--------------------Zeichen Auswerten ----------------------
Auswerten:
X = 0 'Spaltenzaehler auf Null
Satzlaenge = Len(satz) 'Ermittle die länge der Satzlänge
For A = 1 To Satzlaenge 'Eine Schleife für jedes Zeichen der Satzlänge

Zeichen = Mid(satz , A , 1) 'Zeichen pro Zeichen auswerten

If Zeichen = " " Then 'für Leerzeichen
Incr X : Spalte(x) = 255
Restore Leerzeichen
For B = 1 To 3
Incr X
Read Spalte(x)
Next B
Incr X : Spalte(x) = 255
End If

If Zeichen = "A" Then 'grosses A
Incr X : Spalte(x) = 255
Restore Gross_a
For B = 1 To 5
Incr X
Read Spalte(x)
Next B
Incr X : Spalte(x) = 255
End If

If Zeichen = "B" Then 'grosses B
Incr X : Spalte(x) = 255
Restore Gross_b
For B = 1 To 5
Incr X
Read Spalte(x)
Next B
Incr X : Spalte(x) = 255
End If





If Zeichen = "H" Then 'grosses H
Incr X : Spalte(x) = 255
Restore Gross_h
For B = 1 To 5
Incr X
Read Spalte(x)
Next B
Incr X : Spalte(x) = 255
End If
Next A



Return


'----------Zeichensatz--------------------
Leerzeichen:
Data &B11111111
Data &B11111111
Data &B11111111

Gross_a:
Data &B11000000
Data &B10110111
Data &B01110111
Data &B10110111
Data &B11000000


Gross_b:
Data &B00000000
Data &B01101110
Data &B01101110
Data &B01101110
Data &B10010001



Gross_c:
Data &B10000001
Data &B01111110
Data &B01111110
Data &B01111110
Data &B10111101


Gross_d:
Data &B00000000
Data &B01111110
Data &B01111110
Data &B01111110
Data &B10000001

Gross_e:
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111

Gross_f:
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111

Gross_g:
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111

Gross_h:
Data &B00000000
Data &B11101111
Data &B11101111
Data &B11101111
Data &B00000000



Hatte das zuerst auch so wie du gemacht, zwischen den Spalten, jeweils die X um eins hochzählen.

Bin aber wieder davon abgekommen.
Mit Schleifen kann man dann leichter einen neuen Zeichensatz hinzufügen :-)

Bluesmash
18.01.2006, 22:58
so ich hab gerade noch etwas ausprobiert und meine zeichen bleiben jetzt perfekt stehen! überhaupt kein ruckel und zucken mehr! wen es bei dir noch ein bisschen ruckelt probier mal das:
Kontakt:
waitms 2 <------ bei mir hat der interrupt manchmal 2mal hintereinander ausgelöst aber erst nachdem ich timer0=0 eingesetzt habe ich verwende eine gabellichtschranke....
Drehzeit = Timer1
Timer1 = 0
Timer0=0 <---- timer zurücksetzen da er einen undefinierten zustand hat und mal früher und später auslöst....
Spaltenzeit = Drehzeit / 510
Array_zaehler = 0
Return


klar darfst du den zeichensatz verwenden! wenn du dafür die kleinbuchstaben machst ;) wenn ich zeit habe mach ich morgen das ABC fertig...

gruss bluesmash

Roberto
19.01.2006, 11:00
Hallo Bluesmash

Habe deinen Tip ausprobiert.
Bei mir hat es nicht viel gebracht. So ca. gleich.
(vielleicht auch weil ich ein wennig schneller drehe.. ?!)

Hatte heute einen anderen komischen Fehler.
Hatte eine einfache Routine zum Probieren.
Nur mit INT0 und dann auslesen von dem Zeichen aus Data und anzeigen.

Hatte da für die Auslesevariable eine Word-Variable definiert und es kamen ganz komische Zeichen raus..
Hatte die dann in Byte geändert und alle war wieder ok.:-k

Bei meinem längerem Programm mit Timer1, Timer0 u.s.w. (siehe oben)
machte das Word für die Variable nix ](*,) (Variable B)
komisch...

Ps.:
Schriftsatz mache ich mir gleich selber..
Habe mir dazu dieses Bild ausgedruckt:
http://www.noritake-itron.com/Softview/font5x7lcd.gif
von hier:
http://www.noritake-itron.com/Softview/fontsavr.htm

Mit den Daten fange ich dort irgendwie nix an.. :-k
Aber das Bild ist schön Strukturiert und da kann man die Zeichen leicht nachzeichen :-)

Ganz ist mir noch nicht klar, wie man den Abstand zwischen den Zeichen machen soll.
Zuerst hatte ich jeweils bei den If Abfragen, anfangs und Ende eine Leer-Spalte drinnen.

Jetzt hatte ich das aber gleich zum Zeichensatz dazugemacht.
(vorne und hinten eine Leerspalte)
Ich glaube so, wird der Code ein bisschen kleiner :-b

Andree-HB
19.01.2006, 14:58
...habe ich übrigens gerade zum Thema bei Pearl gefunden :
http://www.pearl.de/productchoice_redirect.jsp?pdid=PE3949&catid=1301&rate=5

PE-3949-75

Roberto
19.01.2006, 16:23
ahaaa.. schaut gut.
:-) Gute Idee .

Bluesmash
19.01.2006, 19:23
der lüfter ist wirklich kewl! aber selbstgemacht macht immernoch mehr freude :)

danke für das bild! das sit super! da kann man es gleich vom bild in den code umwandeln muss man nichteinmal etwas zeichnen...

gruss bluesmash

--edit--
ich habe es einfach so gemacht das dort wo die zeichen ins array geschrieben werden einfach als 6. stelle eine leere spalte kommt...

Bluesmash
19.01.2006, 21:24
hmmm... so langsam hab ich ein problem mit dem speicherplatz auf dem mega8... :(

ich habe nun das grosse ABC drauf und die 8kbyte sind nun zu 75% belegt... :(

wie siehts bei dir aus? hast du eine platzsparere version?

gruss bluesmash

Roberto
19.01.2006, 23:56
Hallo


danke für das bild! das sit super! da kann man es gleich vom bild in den code umwandeln muss man nichteinmal etwas zeichnen

mmmmhh.. wie meinst du das ???? :-k
Oder nimmst Du den Code von der Seite?


ch habe es einfach so gemacht das dort wo die zeichen ins array geschrieben werden einfach als 6. stelle eine leere spalte kommt...

Ahaa.. also nur eine Leerspalte pro zeichen..
Ist das nicht zu eng ?



hmmm... so langsam hab ich ein problem mit dem speicherplatz auf dem mega8

mmmhh ... bin noch nicht soweit.
Habe die Daten von den grossen Buchstaben fertig gezeichnet und die Abfrage bis zum Q.
Habe ca. so um die 4Kb

Wie schaut dein Code jetzt aus?
Noch das Incr u.s.w. zwischen den Spalten im Zeichensatz ?

super_castle
20.01.2006, 12:45
hier gibt es eine bessere lösung:

www.rickard.gunee.com/projects/mechscan/dualpic/gamesys.php

www.luberth.com/analog.htm

Castle

PicNick
20.01.2006, 12:56
Ich hab mich hier über Programmspeichertabellen etwas ausgelassen.
Vielleicht ist der eine oder andere Gedanke dabei, mit dem jemand was anfangen kann

https://www.roboternetz.de/wissen/index.php/Bascom_Tabellen#Beispiel_Dot-Matrix-Anzeige

Roberto
20.01.2006, 13:44
Hallo

Toll Castle !!! :-)


Toll PicNick!! :-)

Werde ich mir alles mal durchlesen

Schlage mich gerade mit RS232 und Funk rum :-(
Empfänger soll rückmelden u.s.w....mit Waitkey(), Sender hat aber 30ms verzögerung u.s.w...
Jetzt endlich klappt es...

l.G. Robert

Bluesmash
20.01.2006, 15:59
@Picnick: ich habe mir heute in der schule (es war langweilig) parktisch das selbe programm geschrieben!

Zeichen aus string auslesen, in dezimal ascii code umwandeln, -65 für die grosbuchstaben, *5 um in der tabelle die richtige zeile anzuwählen, und dann die nächsten 5byte in mein array schreiben...

der code wird dadurch superschlank und man hat genug platz auf nem mega8 für einen riesigen zeichensatz... nicht so wie in meinem "müehsamen" code weiter oben...

im moment suche ich gerade einen IR receiver damit ich dem Rotor während dem laufen vom palm einen neuen zeichenstring senden kann...

gruss bluesmash

Roberto
20.01.2006, 20:04
Hallo

Habe mir die Seite hier nochmals angeschaut.
http://www.luberth.com/analog.htm
Da gibt es unten einen Artikel über ein Lasersystem:
http://www.luberth.com/help/Mechanically_scanned_laser_display_microchip_pic/Mechanically_scanned_laser_display_microchip_pic.h tm

Hatte vor ein paar Tagen auch so eine Idee, nur mit je einem Pointer pro Zeile. Ablenkung mit einem Spiegel der wackelt, statt Prisma.

Leider hatte das aber nicht eine sonderlich grosse Wirkung :-(
Durch das Takten wird der Laser doch zu dunkel :-(
Mich wundert , wie der das so gut hinbekommt hat und wie der eigentlich die einzelnen Zeilen zusammenbekommt. (Mein Englsich leider nicht gut :-& )

Bluesmash
20.01.2006, 21:18
wow das mit dem laser ist wirklich kewl! aber sicher extrem schwierig anzusteuern...

mein prog ist so gut wie fertig und schön schlank... habe nun das grose und kleine abc eingefügt... und braucht nur 25% auf dem mega8. hier wiedermal mein prog (wenn du möchtest kanst du das kleine abc von mir kopieren...):

$regfile = "m8def.dat"
$crystal = 8000000

$framesize = 512
$swstack = 512
$hwstack = 512

Config Portb = Output

Dim Umdrehung As Word
Dim Spaltenzeit As Byte
Dim A As Byte
Dim X As Byte

Dim I As Byte
Dim L As Byte
Dim Anzeige As String * 30
Dim Zeichen As String * 1
Dim Zeichenasc As Byte
Dim Spalte(150) As Byte
Dim Laenge As Byte
Dim Spalten As Byte
Dim Index As Word
Dim Stelle As Byte


Config Int0 = Falling
On Int0 Int0isr
Enable Int0

Config Timer0 = Timer , Prescale = 64
On Timer0 Timer0isr
Enable Timer0

Config Timer1 = Timer , Prescale = 8
On Timer1 Timer1isr
Enable Timer1

Enable Interrupts

Start Timer0
Start Timer1

Anzeige = " Roboternetz"


Do

If L = Laenge Then
L = 0
X = 0
Stelle = 0
End If

Incr L

Zeichen = Mid(anzeige , L , 1)
Laenge = Len(anzeige)
Spalten = Laenge * 7

Zeichenasc = Asc(zeichen)

If Zeichen = " " Then
For I = 1 To 6
Incr Stelle
Spalte(stelle) = 255
Next I
End If

If Zeichenasc >= 65 And Zeichenasc <= 90 Then
Index = Zeichenasc - 65
Index = Index * 5
For I = 1 To 5
Incr Stelle
Spalte(stelle) = Lookup(index , Abc_gross)
Incr Index
Next I
Incr Stelle
Spalte(stelle) = 255
Incr Stelle
Spalte(stelle) = 255
End If

If Zeichenasc >= 97 And Zeichenasc <= 122 Then
Index = Zeichenasc - 97
Index = Index * 5
For I = 1 To 5
Incr Stelle
Spalte(stelle) = Lookup(index , Abc_klein)
Incr Index
Next I
Incr Stelle
Spalte(stelle) = 255
Incr Stelle
Spalte(stelle) = 255
End If

If Zeichenasc >= 48 And Zeichenasc <= 57 Then
Index = Zeichenasc - 48
Index = Index * 5
For I = 1 To 5
Incr Stelle
Spalte(stelle) = Lookup(index , 123)
Incr Index
Next I
Incr Stelle
Spalte(stelle) = 255
Incr Stelle
Spalte(stelle) = 255
End If
Loop



Int0isr:
Waitms 2
Umdrehung = Timer1
Umdrehung = Umdrehung / 1200
Spaltenzeit = Umdrehung
Timer1 = 0
Timer0 = 0
A = 0
Return


Timer0isr:
Load Timer0 , Spaltenzeit
Incr A
If A > Spalten Then
Portb = 255
Else
Portb = Spalte(a)
End If
Return


Timer1isr:
I = 0
X = 0
Return


Abc_gross:
Data &B10000001 , &B01101111 , &B01101111 , &B01101111 , &B10000001
Data &B00000001 , &B01101101 , &B01101101 , &B01101101 , &B10010011
Data &B11000111 , &B10111011 , &B01111101 , &B01111101 , &B01111101
Data &B00000001 , &B01111101 , &B01111101 , &B10111011 , &B11000111
Data &B00000001 , &B01101101 , &B01101101 , &B01111101 , &B01111101
Data &B00000001 , &B01101111 , &B01101111 , &B01111111 , &B01111111
Data &B10000011 , &B01111101 , &B01101101 , &B01101101 , &B01100011
Data &B00000001 , &B11101111 , &B11101111 , &B11101111 , &B00000001
Data &B11111111 , &B01111101 , &B00000001 , &B01111101 , &B11111111
Data &B11111011 , &B01111101 , &B00000001 , &B01111111 , &B11111111
Data &B00000001 , &B11101111 , &B11010111 , &B10111011 , &B01111101
Data &B00000001 , &B11111101 , &B11111101 , &B11111101 , &B11111101
Data &B00000001 , &B10111111 , &B11001111 , &B10111111 , &B00000001
Data &B00000001 , &B11011111 , &B11101111 , &B11110111 , &B00000001
Data &B10000011 , &B01111101 , &B01111101 , &B01111101 , &B10000011
Data &B00000001 , &B01101111 , &B01101111 , &B01101111 , &B10011111
Data &B10000011 , &B01111101 , &B01110101 , &B01111011 , &B10000101
Data &B00000001 , &B01101111 , &B01100111 , &B01101011 , &B10011101
Data &B10011101 , &B01101101 , &B01101101 , &B01101101 , &B01110011
Data &B01111111 , &B01111111 , &B00000001 , &B01111111 , &B01111111
Data &B00000011 , &B11111101 , &B11111101 , &B11111101 , &B00000011
Data &B00000111 , &B11111011 , &B11111101 , &B11111011 , &B00000111
Data &B00000011 , &B11111101 , &B11100011 , &B11111101 , &B00000011
Data &B00111001 , &B11010111 , &B11101111 , &B11010111 , &B00111001
Data &B00011111 , &B11101111 , &B11110001 , &B11101111 , &B00011111
Data &B01111001 , &B01110101 , &B01101101 , &B01011101 , &B00111101

Abc_klein:
Data &B11111011 , &B11010101 , &B11010101 , &B11010101 , &B11100001
Data &B00000001 , &B11110101 , &B11101101 , &B11101101 , &B11110011
Data &B11100011 , &B11011101 , &B11011101 , &B11011101 , &B11111011
Data &B11110011 , &B11101101 , &B11101101 , &B11110101 , &B00000001
Data &B11100011 , &B11010101 , &B11010101 , &B11010101 , &B11100111
Data &B11101111 , &B10000001 , &B01101111 , &B01111111 , &B10111111
Data &B11001111 , &B10110101 , &B10110101 , &B10110101 , &B10000011
Data &B00000001 , &B11101111 , &B11011111 , &B11011111 , &B11100001
Data &B11111111 , &B11111111 , &B10100001 , &B11111111 , &B11111111
Data &B11111011 , &B11111101 , &B11011101 , &B01000011 , &B11111111
Data &B00000001 , &B11110111 , &B11101011 , &B11011101 , &B11111111
Data &B11111111 , &B01111101 , &B00000001 , &B11111101 , &B11111111
Data &B11000001 , &B11011111 , &B11100111 , &B11011111 , &B11100001
Data &B11000001 , &B11101111 , &B11011111 , &B11101111 , &B11100001
Data &B11100011 , &B11011101 , &B11011101 , &B11011101 , &B11100011
Data &B11000001 , &B11010111 , &B11010111 , &B11010111 , &B11101111
Data &B11101111 , &B11010111 , &B11010111 , &B11100111 , &B11000001
Data &B11000001 , &B11101111 , &B11011111 , &B11101111 , &B11101111
Data &B11101101 , &B11010101 , &B11010101 , &B11010101 , &B11111011
Data &B11011111 , &B00000011 , &B11011101 , &B11111101 , &B11111011
Data &B11000011 , &B11111101 , &B11111101 , &B11111011 , &B11000001
Data &B11000111 , &B11111011 , &B11111101 , &B11111011 , &B11000111
Data &B11000011 , &B11111101 , &B11110011 , &B11111101 , &B11000011
Data &B11011101 , &B11101011 , &B11110111 , &B11101011 , &B11011101
Data &B11001111 , &B11110101 , &B11110101 , &B11110101 , &B11000011
Data &B11011101 , &B11011001 , &B11010101 , &B11001101 , &B11011101


123:


und noch ein bild, ich werde den ganzen rotor nochmals neu bauen da er fast auseinanderfällt ;) und auf jedenfall hellere LED's...

--edit--

hab gerade bemerkt das beim kleinen "r" noch ein fehler drin ist...

super_castle
20.01.2006, 21:48
er hat 7 laser übereinander, für jede reihe einen.

Castle

Roberto
21.01.2006, 00:50
Bluesmash

Ahaaa, interessant deine Abfrage der Zeichen.
Du grenzt also die Zeichen ein und ordnest die einfach so hintereinander, dass der Asc-Code auch zur Reihenfolge passt der Daten passen.
Sehe ich das richtig ?
Muss das mal ausdrucken und genau durchkauen :-)

Ein Antwort bist du mir noch schuldig ;-)
Wie meintest Du das mit dem Schriftsatz von dem Bild umwandeln ?

@castle
Danke für die INfo :-)
Aber kannst Du mir sagen, wo das steht?
Kann da nix finden .
Meine 8 Laser nebeneinander brauchen schon so ca. 12cm breite.
Bei der Home scheint es aber eher nur einer zu sein (Bild) ?!




-----------------------


DAs würde mir auch gut gefallen....
http://www.luberth.com/help/LEDSPIN.HTM
So für Silvester oder so... ;-)

Bluesmash
21.01.2006, 08:55
ja du siehst das genau richtig! ich musste einfach drei abfragen für die verschiedenen zeichengruppen machen... eine für die Grossbuchstaben, eine für die kleinen, und eine für die zahlen da sie im ascii code nicht hintereinander sind... in der tabelle sind die zeichen von a-z sortiert (jeweils eine zeile für einen buchstaben). und eine abfrage auf ein leerzeichen.

das mit dem bild meinte ich so dass ich jetzt nicht zuerst jedes zeichen aufzeichnen muss um es anschliessend im code einzutippen sonder gleich vom bild aus eintippen... :)

schade dass man kein grössenvergleich hat das teil sieht ja riesig aus! was hat den der für lampen dran die so schnell schalten...?

im moment bin ich gerade auf der suche nach einem ir-receiver damit ich dem rotor vom palm aus neue daten senden kann... hast du da ev. erfahrung?

gruss bluesmash

PicNick
21.01.2006, 09:54
@bluesmash

Wenn du deinen Code noch ein wenig shrinken willst, hätt ich einen Vorschlag (Du mußt ein wenig mitdenken, aber das hast du ja drauf)



Dim Lowchar As Byte
Dim Hichar As Byte
Dim Tabadr As Word

do
'........................
' dein code von oben
'........................

Lowchar = 65
Hichar = 90
Tabadr = Loadlabel(abc_gross)
Gosub Make_it

Lowchar = 97
Hichar = 122
Tabadr = Loadlabel(abc_klein)
Gosub Make_it

Lowchar = 48
Hichar = 57
Tabadr = Loadlabel(123)
Gosub Make_it

Loop

'-------------------------------------------------------
Make_it:
If Zeichenasc >= Lowchar And Zeichenasc <= Hichar Then
Index = Zeichenasc - Lowchar
Index = Index * 5
Tabadr = Tabadr + Index
For I = 1 To 5
Incr Stelle
Spalte(stelle) = Cpeek(tabadr)
Incr Tabadr
Incr Index
Next I
Incr Stelle
Spalte(stelle) = 255
Incr Stelle
Spalte(stelle) = 255
End If
Return

Bluesmash
21.01.2006, 10:47
danke! super idee!! darauf sollte man auch erst mal kommen... hab dein code soweit begriffen...

was bedeutet aber Cpeek(tabadr)????

gruss bluesmash

PicNick
21.01.2006, 13:51
Cpeek ist, ein byte aus dem Prog-mem lesen (-->Help)


addr = loadlabel( mylabel)
val = CPeek(addr)
mylabel:
DATA xx


Vorteil, besonders in deinem Fall: er muß nicht 5-mal rechnen (label + index), wie bei "lookup(index, label)"

Roberto
21.01.2006, 19:11
Hallo Bluesmash

Habe mir deinen Code jetzt durchgeschaut. :-)
Ein paar Fragen hätte ich dazu:

* config Portd fehlt

* Timer1isr ist umsonst.
I und X werden nicht verwendet (I nur für schleifen)

* Bei Index wollte ich schon fragen, habs aber inzwischen kapiert :-)
Sehr schlau :-)

(die Verbesserung von Robert muss ich mir später noch anschauen :-)
Habs jetzt durch und ich glaube auch begriffen :-)
Nicht schlecht!!! :-)
Wo hast Du den diese Tricks nur her ???

Roberto
22.01.2006, 11:00
Hallo

Mein Code ist jetzt soweit fertig :-)
(Satz wird auch zentriert)


'--------Drehlicht-----V1.13-neu---------------
' 8MHz RC Intern

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


'---Config Port's -----------------
Config Portb = Output 'Leds
Portb = 255

Config Portd = Input
Portd = 255

'---config Int0------
Config Int0 = Falling
Enable Int0
On Int0 Kontakt

'--- Config Timer1 ----
Config Timer1 = Timer , Prescale = 8
Enable Timer1

'--- Config Timer0 ------
Config Timer0 = Timer , Prescale = 8
Enable Timer0
On Timer0 Spalten


Enable Interrupts
Load Timer0 , 255


Dim Drehzeit As Long
Dim Spaltenzeit As Word
Dim B1 As Byte

Dim Spalte(350) As Byte
Dim Array_zaehler As Word


Dim A As Byte
Dim I As Byte

'Saetze
Dim Satz As String * 45
Dim Zeichen As String * 1
Dim Asc_zeichen As Byte
Dim Satzlaenge As Word
Dim X As Word 'Spaltenzaehler für Zeichen auftragen
Dim Zeichenasc As Byte

Dim Lowchar As Byte
Dim Hichar As Byte
Dim Tabadr As Word
Dim Index As Word

Timer1 = 0
Timer0 = 0
Array_zaehler = 0
X = 0



'--------------------Hauptprogramm--------------------------
For X = 1 To 350 'Array Löschen
Spalte(x) = 255 'max. Spalten
Next X
X = 0
'--------------------------------------------------
Waitms 20
Do
Satz = "Test Test Test Test Test Test"
Gosub Auswerten
Waitms 20


Satz = "0123456789"
Gosub Auswerten
Waitms 50

Satz = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Gosub Auswerten
Waitms 50

Satz = "abcdefghijklmnopqrstuvwxyz"
Gosub Auswerten
Waitms 50

Satz = "Ende"
Gosub Auswerten
Waitms 50


Loop


End





'==============================Unterprogramme===== ==============================
'--------------ISR von Int0--------------------
Kontakt:
Drehzeit = Timer1
Timer1 = 0
Timer0 = 0
Spaltenzeit = Drehzeit / 510
Array_zaehler = 0
Return

'------------ISR von Timer0 --------------------
Spalten:
Load Timer0 , Spaltenzeit

Portb = 255 'Lösche Spalte
If Array_zaehler < 350 Then
Incr Array_zaehler
Portb = Spalte(array_zaehler) 'Werte auf Rotor auftragen
End If

Return





'--------------------Zeichen Auswerten ----------------------
Auswerten:
For X = 1 To 350 'Array Löschen
Spalte(x) = 255
Next X


Satzlaenge = Len(satz) 'Ermittle die Satzlänge
X = Satzlaenge * 7 'Errechne die Position
X = X / 2 'für den Start
X = 175 - X

For A = 1 To Satzlaenge 'Eine Schleife für jedes Zeichen der Satzlänge
Zeichen = Mid(satz , A , 1) 'Zeichen pro Zeichen auswerten
Zeichenasc = Asc(zeichen)

If Zeichen = " " Then 'Leerzeichen machen
For I = 1 To 7
Incr X
Spalte(x) = 255
Next I
End If

Lowchar = 65 'Prüfe Zeichen A-Z
Hichar = 90
Tabadr = Loadlabel(abc_gross)
Gosub Daten_suchen

Lowchar = 97 'Prüfe Zeichen a-z
Hichar = 122
Tabadr = Loadlabel(abc_klein)
Gosub Daten_suchen

Lowchar = 48 'Prüfe Zahlen 0-9
Hichar = 57
Tabadr = Loadlabel(123)
Gosub Daten_suchen
Next A

Return

'--------------Daten von Zeichen suchen---------------------------------------
Daten_suchen:
If Zeichenasc >= Lowchar And Zeichenasc <= Hichar Then
Index = Zeichenasc - Lowchar
Index = Index * 5
Tabadr = Tabadr + Index
For I = 1 To 5
Incr X
Spalte(x) = Cpeek(tabadr) 'hole Daten
Incr Tabadr
Incr Index
Next I
Incr X
Spalte(x) = 255 'leere Spalte
Incr X
Spalte(x) = 255 'leere Spalte
End If
Return




'----------Zeichensatz--------------------

Abc_gross:
Data &B10000001 , &B01101111 , &B01101111 , &B01101111 , &B10000001
Data &B00000001 , &B01101101 , &B01101101 , &B01101101 , &B10010011
Data &B11000111 , &B10111011 , &B01111101 , &B01111101 , &B01111101
Data &B00000001 , &B01111101 , &B01111101 , &B10111011 , &B11000111
Data &B00000001 , &B01101101 , &B01101101 , &B01111101 , &B01111101
Data &B00000001 , &B01101111 , &B01101111 , &B01111111 , &B01111111
Data &B10000011 , &B01111101 , &B01101101 , &B01101101 , &B01100011
Data &B00000001 , &B11101111 , &B11101111 , &B11101111 , &B00000001
Data &B11111111 , &B01111101 , &B00000001 , &B01111101 , &B11111111
Data &B11111011 , &B01111101 , &B00000001 , &B01111111 , &B11111111
Data &B00000001 , &B11101111 , &B11010111 , &B10111011 , &B01111101
Data &B00000001 , &B11111101 , &B11111101 , &B11111101 , &B11111101
Data &B00000001 , &B10111111 , &B11001111 , &B10111111 , &B00000001
Data &B00000001 , &B11011111 , &B11101111 , &B11110111 , &B00000001
Data &B10000011 , &B01111101 , &B01111101 , &B01111101 , &B10000011
Data &B00000001 , &B01101111 , &B01101111 , &B01101111 , &B10011111
Data &B10000011 , &B01111101 , &B01110101 , &B01111011 , &B10000101
Data &B00000001 , &B01101111 , &B01100111 , &B01101011 , &B10011101
Data &B10011101 , &B01101101 , &B01101101 , &B01101101 , &B01110011
Data &B01111111 , &B01111111 , &B00000001 , &B01111111 , &B01111111
Data &B00000011 , &B11111101 , &B11111101 , &B11111101 , &B00000011
Data &B00000111 , &B11111011 , &B11111101 , &B11111011 , &B00000111
Data &B00000011 , &B11111101 , &B11100011 , &B11111101 , &B00000011
Data &B00111001 , &B11010111 , &B11101111 , &B11010111 , &B00111001
Data &B00011111 , &B11101111 , &B11110001 , &B11101111 , &B00011111
Data &B01111001 , &B01110101 , &B01101101 , &B01011101 , &B00111101

Abc_klein:
Data &B11111011 , &B11010101 , &B11010101 , &B11010101 , &B11100001
Data &B00000001 , &B11110101 , &B11101101 , &B11101101 , &B11110011
Data &B11100011 , &B11011101 , &B11011101 , &B11011101 , &B11111011
Data &B11110011 , &B11101101 , &B11101101 , &B11110101 , &B00000001
Data &B11100011 , &B11010101 , &B11010101 , &B11010101 , &B11100111
Data &B11101111 , &B10000001 , &B01101111 , &B01111111 , &B10111111
Data &B11001111 , &B10110101 , &B10110101 , &B10110101 , &B10000011
Data &B00000001 , &B11101111 , &B11011111 , &B11011111 , &B11100001
Data &B11111111 , &B11111111 , &B10100001 , &B11111111 , &B11111111
Data &B11111011 , &B11111101 , &B11011101 , &B01000011 , &B11111111
Data &B00000001 , &B11110111 , &B11101011 , &B11011101 , &B11111111
Data &B11111111 , &B01111101 , &B00000001 , &B11111101 , &B11111111
Data &B11000001 , &B11011111 , &B11100111 , &B11011111 , &B11100001
Data &B11000001 , &B11101111 , &B11011111 , &B11101111 , &B11100001
Data &B11100011 , &B11011101 , &B11011101 , &B11011101 , &B11100011
Data &B11000001 , &B11010111 , &B11010111 , &B11010111 , &B11101111
Data &B11101111 , &B11010111 , &B11010111 , &B11100111 , &B11000001
Data &B11000001 , &B11101111 , &B11011111 , &B11101111 , &B11101111
Data &B11101101 , &B11010101 , &B11010101 , &B11010101 , &B11111011
Data &B11011111 , &B00000011 , &B11011101 , &B11111101 , &B11111011
Data &B11000011 , &B11111101 , &B11111101 , &B11111011 , &B11000001
Data &B11000111 , &B11111011 , &B11111101 , &B11111011 , &B11000111
Data &B11000011 , &B11111101 , &B11110011 , &B11111101 , &B11000011
Data &B11011101 , &B11101011 , &B11110111 , &B11101011 , &B11011101
Data &B11001111 , &B11110101 , &B11110101 , &B11110101 , &B11000011
Data &B11011101 , &B11011001 , &B11010101 , &B11001101 , &B11011101


123:

Data &B10000011
Data &B01011101
Data &B01101101
Data &B01110101
Data &B10000011

Data &B11111111
Data &B10111101
Data &B00000001
Data &B11111101
Data &B11111111

Data &B10111101
Data &B01111001
Data &B01110101
Data &B01101101
Data &B10011101

Data &B01111011
Data &B01111101
Data &B01011101
Data &B00101101
Data &B01110011

Data &B11100111
Data &B11010111
Data &B10110111
Data &B00000001
Data &B11110111

Data &B00011011
Data &B01011101
Data &B01011101
Data &B01011101
Data &B01100011

Data &B11000011
Data &B10101101
Data &B01101101
Data &B01101101
Data &B11110011

Data &B01111111
Data &B01110001
Data &B01101111
Data &B01011111
Data &B00111111

Data &B10010011
Data &B01101101
Data &B01101101
Data &B01101101
Data &B10010011

Data &B10011111
Data &B01101101
Data &B01101101
Data &B01101011
Data &B10000111


@bluesmash
Hatte deinen Code auch mal probiert. :-)
Deiner reagiert ein bisschen anders als meiner.
Bei dir flackern die Led's auch, wenn der Rotor sich nicht dreht..
Bei mir nur, nach einer Drehung..

Wegen dem Zeichensatz.
Schade das man so eigentlich die 8the Led nicht benutzt. (nur 1-7)
Müsste man eventuell umschreiben... (Fleissaufgabe :-) )

Bluesmash
22.01.2006, 21:25
hallo roberto!

was meinst du mit "config pord fehlt"? ich benütze ja portd nicht... nur portb für die led's...
ja stimmt timer1isr und das byte x kann ich eigentlich rausschmeissen....

darf ich deine tabelle für die zahlen übernehmen?
die 8the LED habe ich extra nicht verwendet da mit 8 leds die buchstaben nicht mehr so schön symetrisch sind... deshalb werden ja auch bei den LCD's nur 7x5 punkte verwendet...

gruss bluesmash

Roberto
22.01.2006, 21:35
Brauchst Du Portd nicht für den INT0 ?
Oder stellt sich der selber.. durch config INT0 ?

Den Zeichensatz kannst Du natürlich verwenden :-)

Bluesmash
22.01.2006, 21:49
achso meinst du das! darüber hab ich noch gar nicht nachgedacht! ;) ich glaube config int0 genügt... bis jetzt hat es funktioniert ;)

gruss bluesmash

Bluesmash
25.01.2006, 20:41
hallo roberto!

ich habe heute eine neue spielerei entwickelt für unser drehlicht :)

probier mal folgenden code aus... portb.6 und 7 (die brauche ich für mein neues drehlicht mit 2 farben...) kanst du löschen und wahrscheinlich die timer anpassen... dann sollte es funktionieren...

den vorschlag von robert hab ich noch nicht eingebaut und die zahlen fehlen immer noch... das werde ich später dann noch machen...

config portd.2 brauche ich jetzt auch für den interrupt da ich nun auch einen hall sensor verwende und ich den internen pullup des portes verwende...



$regfile = "m8def.dat"
$crystal = 8000000

$framesize = 256
$swstack = 256
$hwstack = 256

Config Portb = Output

Config Portd.6 = Output
Portd.6 = 0
Config Portd.7 = Output
Portd.7 = 0

Dim Umdrehung As Word
Dim Spaltenzeit As Byte
Dim A As Byte
Dim X As Byte
Dim X_7 As Byte
Dim I As Byte
Dim L As Byte
Dim Anzeige As String * 30
Dim Zeichen As String * 1
Dim Zeichenasc As Byte
Dim Spalte(150) As Byte
Dim Laenge As Byte
Dim Spalten As Byte
Dim Index As Word
Dim Stelle As Byte
Dim Spalteanz As Byte
Dim Spalteleer As Byte
Dim Spalteleer_7 As Byte

Config Int0 = Falling
On Int0 Int0isr
Enable Int0
Config Portd.2 = Input
Portd.2 = 1


Config Timer0 = Timer , Prescale = 64
On Timer0 Timer0isr
Enable Timer0

Config Timer1 = Timer , Prescale = 8
On Timer1 Timer1isr
Enable Timer1

Enable Interrupts

Start Timer0
Start Timer1

Anzeige = "Roman Sutter"

Portd.6 = 1
Portb.7 = 0



Do

Spalteleer = 133

Incr L

Zeichen = Mid(anzeige , L , 1)
Laenge = Len(anzeige)
Spalten = Laenge * 7

Zeichenasc = Asc(zeichen)

If Zeichen = " " Then
For I = 1 To 7
Incr Stelle
Spalte(stelle) = 255
Next I
End If

If Zeichenasc >= 65 And Zeichenasc <= 90 Then
Index = Zeichenasc - 65
Index = Index * 5
For I = 1 To 5
Incr Stelle
Spalte(stelle) = Lookup(index , Abc_gross)
Incr Index
Next I
Incr Stelle
Spalte(stelle) = 255
Incr Stelle
Spalte(stelle) = 255
End If

If Zeichenasc >= 97 And Zeichenasc <= 122 Then
Index = Zeichenasc - 97
Index = Index * 5
For I = 1 To 5
Incr Stelle
Spalte(stelle) = Lookup(index , Abc_klein)
Incr Index
Next I
Incr Stelle
Spalte(stelle) = 255
Incr Stelle
Spalte(stelle) = 255
End If

If Zeichenasc >= 48 And Zeichenasc <= 57 Then
Index = Zeichenasc - 48
Index = Index * 5
For I = 1 To 5
Incr Stelle
Spalte(stelle) = Lookup(index , 123)
Incr Index
Next I
Incr Stelle
Spalte(stelle) = 255
Incr Stelle
Spalte(stelle) = 255
End If

Loop Until L = Laenge

Do
nop
Loop


Int0isr:
Waitms 5
Umdrehung = Timer1
Umdrehung = Umdrehung / 1200
Spaltenzeit = Umdrehung
Timer1 = 0
Timer0 = 0
A = 0
Spalteanz = 0
If X <> Spalten Then
Spalteleer = Spalteleer - 7
Spalteleer_7 = Spalteleer + 7
If Spalteleer = X_7 Then
Spalteleer = 133
X = X + 7
X_7 = X + 7
End If
Else
Portd.6 = 0
Portd.7 = 1
End If

Return


Timer0isr:
Load Timer0 , Spaltenzeit

Incr A
If A > X Then
If A > Spalteleer Then
If A > Spalteleer_7 And A > X_7 And A > Spalteanz Then
Portb = 255
Else
Incr Spalteanz
Portb = Spalte(spalteanz)
End If
Else
Portb = 255
End If
Else
Incr Spalteanz
Portb = Spalte(spalteanz)
End If
Return


Timer1isr:

Return


Abc_gross:
Data &B10000001 , &B01101111 , &B01101111 , &B01101111 , &B10000001
Data &B00000001 , &B01101101 , &B01101101 , &B01101101 , &B10010011
Data &B11000111 , &B10111011 , &B01111101 , &B01111101 , &B01111101
Data &B00000001 , &B01111101 , &B01111101 , &B10111011 , &B11000111
Data &B00000001 , &B01101101 , &B01101101 , &B01111101 , &B01111101
Data &B00000001 , &B01101111 , &B01101111 , &B01111111 , &B01111111
Data &B10000011 , &B01111101 , &B01101101 , &B01101101 , &B01100011
Data &B00000001 , &B11101111 , &B11101111 , &B11101111 , &B00000001
Data &B11111111 , &B01111101 , &B00000001 , &B01111101 , &B11111111
Data &B11111011 , &B01111101 , &B00000001 , &B01111111 , &B11111111
Data &B00000001 , &B11101111 , &B11010111 , &B10111011 , &B01111101
Data &B00000001 , &B11111101 , &B11111101 , &B11111101 , &B11111101
Data &B00000001 , &B10111111 , &B11001111 , &B10111111 , &B00000001
Data &B00000001 , &B11011111 , &B11101111 , &B11110111 , &B00000001
Data &B10000011 , &B01111101 , &B01111101 , &B01111101 , &B10000011
Data &B00000001 , &B01101111 , &B01101111 , &B01101111 , &B10011111
Data &B10000011 , &B01111101 , &B01110101 , &B01111011 , &B10000101
Data &B00000001 , &B01101111 , &B01100111 , &B01101011 , &B10011101
Data &B10011101 , &B01101101 , &B01101101 , &B01101101 , &B01110011
Data &B01111111 , &B01111111 , &B00000001 , &B01111111 , &B01111111
Data &B00000011 , &B11111101 , &B11111101 , &B11111101 , &B00000011
Data &B00000111 , &B11111011 , &B11111101 , &B11111011 , &B00000111
Data &B00000011 , &B11111101 , &B11100011 , &B11111101 , &B00000011
Data &B00111001 , &B11010111 , &B11101111 , &B11010111 , &B00111001
Data &B00011111 , &B11101111 , &B11110001 , &B11101111 , &B00011111
Data &B01111001 , &B01110101 , &B01101101 , &B01011101 , &B00111101

Abc_klein:
Data &B11111011 , &B11010101 , &B11010101 , &B11010101 , &B11100001
Data &B00000001 , &B11110101 , &B11101101 , &B11101101 , &B11110011
Data &B11100011 , &B11011101 , &B11011101 , &B11011101 , &B11111011
Data &B11110011 , &B11101101 , &B11101101 , &B11110101 , &B00000001
Data &B11100011 , &B11010101 , &B11010101 , &B11010101 , &B11100111
Data &B11101111 , &B10000001 , &B01101111 , &B01111111 , &B10111111
Data &B11001111 , &B10110101 , &B10110101 , &B10110101 , &B10000011
Data &B00000001 , &B11101111 , &B11011111 , &B11011111 , &B11100001
Data &B11111111 , &B11111111 , &B10100001 , &B11111111 , &B11111111
Data &B11111011 , &B11111101 , &B11011101 , &B01000011 , &B11111111
Data &B00000001 , &B11110111 , &B11101011 , &B11011101 , &B11111111
Data &B11111111 , &B01111101 , &B00000001 , &B11111101 , &B11111111
Data &B11000001 , &B11011111 , &B11100111 , &B11011111 , &B11100001
Data &B11000001 , &B11101111 , &B11011111 , &B11011111 , &B11100001
Data &B11100011 , &B11011101 , &B11011101 , &B11011101 , &B11100011
Data &B11000001 , &B11010111 , &B11010111 , &B11010111 , &B11101111
Data &B11101111 , &B11010111 , &B11010111 , &B11100111 , &B11000001
Data &B11000001 , &B11101111 , &B11011111 , &B11011111 , &B11101111
Data &B11101101 , &B11010101 , &B11010101 , &B11010101 , &B11111011
Data &B11011111 , &B00000011 , &B11011101 , &B11111101 , &B11111011
Data &B11000011 , &B11111101 , &B11111101 , &B11111011 , &B11000001
Data &B11000111 , &B11111011 , &B11111101 , &B11111011 , &B11000111
Data &B11000011 , &B11111101 , &B11110011 , &B11111101 , &B11000011
Data &B11011101 , &B11101011 , &B11110111 , &B11101011 , &B11011101
Data &B11001111 , &B11110101 , &B11110101 , &B11110101 , &B11000011
Data &B11011101 , &B11011001 , &B11010101 , &B11001101 , &B11011101


123:



viel spass damit :)
gruss bluesmash

x-ryder
19.06.2006, 22:39
fallses noch wen interessiert (sorry, dassich so spät damit ankomm *auf die uhr schaut* ;)) das mit dem lasersystem ist so:

du hast einen laser und einen motor mit in dem fall warscheinlich 7 spiegeln.
diese 7 spiegel sind jeweils in einem anderen winkel am motor angebracht, so dass wenn die oberste zeile benutzt werden soll dafür immer nur ein spiegel zuständig ist. über die zeit wann der laser an ist macht man die spalten, aber das war ja klar...

Martin ^^

Roberto
19.06.2006, 23:17
Danke für die Info :-)

Bot-Builder
22.01.2009, 12:02
Hallo allerseits!

Ich habe mich gerade erst in den Thread eingelesen. Und genau genommen passt meine Frage nicht wirklich in dieses Forum. Ich möchte aber keinen neuen Thread eröffnen. Würde aber gern ein Thema aufnehmen, dass ganz zu Anfang kurz angeschnitten wurde.

Ich arbeite gerade am Entwurf eines rotierenden Bakenempfängers. Und stehe vor dem Problem der Spannungsübertragung. Habe einige Versuch mit selbstgewickelten Spulen aus Kupflackdraht gemacht, aber war nicht wirklich erfolgreich damit.



Auf Dauer wird der Schleifer nicht halten da bietet sich nen rotiernder Trafo an.

@Ratber
Da bin ich im Grundsatz Deiner Meinung. Die Idee von @Roberto ist aber schon clever gemacht.
Könntest Du bitte einmal beschreiben wie der rotierende Trafo an Deinem Entwurf funktioniert hat bzw. aufgebaut war?

@Bluesmash
Wie hast Du bei Dir die Spannungsübertragung gelöst?


Danke.


Viele Grüße

Uwe

Bluesmash
22.01.2009, 12:10
Hallo Uwe

Ich habe die übertragung ganz einfach mit einem schleifer und schleifring gelöst. dabei habe ich den GND über die motorwelle übertragen. war aber nur eine quick&dirty lösung...

gruss bluesmash

Ratber
22.01.2009, 15:07
@Ratber
Da bin ich im Grundsatz Deiner Meinung. Die Idee von @Roberto ist aber schon clever gemacht.
Könntest Du bitte einmal beschreiben wie der rotierende Trafo an Deinem Entwurf funktioniert hat bzw. aufgebaut war?



Da ist nicht viel zu erklären.

Im Grunde 2 Flachwicklungen als Tonne die ineinander passen.
Flach geht es übrigens auch.
Der Rest ist etwas Elektronik.

Heute würde ich einfach zwei bidirektionale Funkmodule nehmen die mittlerweile sehr preiswert in kleiner Bauform zu bekommen sind.

Bot-Builder
22.01.2009, 20:57
Heute würde ich einfach zwei bidirektionale Funkmodule nehmen die mittlerweile sehr preiswert in kleiner Bauform zu bekommen sind.

Jetzt hilf mir mal. Wie stellt Du Dir Leistungsübertragung mit zwei Funkmodulen vor?


Im Grunde 2 Flachwicklungen als Tonne die ineinander passen.
Flach geht es übrigens auch.
Der Rest ist etwas Elektronik.


Also das mit den Wicklungen ist zumindest theoretisch so weit klar. Allerdings bin ich mir über die konstruktiven Details nicht im Klaren. Gleichviele Wicklungen (wieviele?) auf beiden Seiten? Wie dick war Dein Kupferlackdraht?

Primärseite mit Recheckspannung von einigen Kiloherz. Auf der Sekundärseite das ganze gleichrichten und mit Elko puffern. Ist es das was mit "Rest ist etwas Elektronik" meinst? Wie viel Spannung bzw. welche Leistung kann man damit übertragen.

viele Grüße

Uwe

Ratber
22.01.2009, 21:28
Nein die Funkübertragung war für die Daten gedacht.

Damals hab ich das wie gesagt kapazitiv über die Welle gemacht.

Heute bekommt man sehr günstig bidirektionale Module so das man sich da keinen großen Kopf mehr machen muß.


Die Energieübertragung wäre einfacher zu bewerkstelligen.

Ich habe glockenförmige Luftspulen genommen damit der Platzbedarf gering bleibt.
Auf der Primärseite habe ich mit einigen khz getaktet um die Verluste zu reduzieren.
Für mehr Leistung passende Ferrithälften drumrum und etwas Feintuning also abstimmung auf die Drehzahl des Rotors.

Die Drahtstärken und genauen Geometrieen der Spulen habe ich aber nicht mehr.
Wäre für dich aber auch wertlos da man sich die Werte eh erst rechnerisch je nach Geometrie erarbeiten muß.

Bot-Builder
23.01.2009, 12:21
Wäre für dich aber auch wertlos da man sich die Werte eh erst rechnerisch je nach Geometrie erarbeiten muß.

Hättest Du einen Tip für mich wo diese mathematischen Zusammenhänge auch für Laien einigermaßen verständlich und nachvollziehbar erklärt sind?

Ratber
23.01.2009, 14:07
Wäre für dich aber auch wertlos da man sich die Werte eh erst rechnerisch je nach Geometrie erarbeiten muß.

Hättest Du einen Tip für mich wo diese mathematischen Zusammenhänge auch für Laien einigermaßen verständlich und nachvollziehbar erklärt sind?

In anlehnung an eine bekannte Buchreihe suchst du in etwa "Induktion für dummies"

Das wird es wohl nicht geben.
Das liegt, vorsichtig gesagt, an der komplexität des Themas selber.

Genauso könnte man nach "Kernphysik für dummies" suchen wenn man vor hat selber einen Reaktor zu bauen.


Sorry !

Bot-Builder
23.01.2009, 16:34
In anlehnung an eine bekannte Buchreihe suchst du in etwa "Induktion für dummies"

Das sicherlich nicht.


Das liegt, vorsichtig gesagt, an der komplexität des Themas selber.

Das es sich hier um eine komplexes Thema handelt, ist schon klar.


Genauso könnte man nach "Kernphysik für dummies" suchen wenn man vor hat selber einen Reaktor zu bauen.

Irgendwie kommen wir, vorsichtig gesagt, nicht wirklich weiter. Weiss Du was, vergiss es einfach.

Ratber
24.01.2009, 12:47
Was den nun ?


Entweder du nimmst dir die nötige Zeit und lernst das Teilgebiet das ich mal vereinfacht mit "Induktion und Magnetismus" betitel.

Oder du machst es wie viele andere nach der Trial and Error Methode.

Dazwischen gibt es nichts ausser "nachbauen" von schon vorhandenen und dokumentierten Projekten.


Mußt dich nur entscheiden.



Irgendwie kommen wir, vorsichtig gesagt, nicht wirklich weiter. Weiss Du was, vergiss es einfach.


Auch ne Möglichkeit..... ;)

dm09
07.07.2009, 08:45
Hallo alle zusammen

Ich weiß zwar das dieses Thema schon länger inaktiv ist trotzt dem wollt ich hier mal eine Frage los werden. Ich bin gerade dabei mir eine Propeller Uhr zu bauen und wollte fragen wie man aus einer Tabelle mit mehren Dateien hinter einander eine nach der andern ziehen kann.
Oder wie man das mit der Zeichen Auswahl besser machen kam.
Ich will nämlich die Uhrzeit nicht wie im Original an 4 Sieben Segment anzeigen aus geben sonder über einen Propeller mit 8 led’s . Zu sagen ist noch das an den Itn0 Pin eine Lichtschranke habe die gegen Masse zieht nur an einer Stelle durch eine Blechfahne unterbrochen wird und dann plus potenzial an den Pin anliegt.
Ich hoffe einer von euch kann mir helfen oder Verbesserungsvorschläge machen.
Ich wehre sehr dankbar darüber, weil ich auch noch nicht sehr lange mit Bascom arbeite.

Hier noch mein Quellcode der von der Black- Strom Uhr von Wolfgang Schwarz abgeleitet ist:


'************************************************* ******************************
' http://www.black-strom.de.vu/
'
'
' Feature:
' - mit Interner Zeitbasis (Timer1)
' - Multiplexausgabe auf Siebensegmentanzeige (Timer0)
' - Uhr ist über zwei Taster einstellbar.
'
' To Do:
' -
'
' Feature for the future:
' - anderer µC evnt. ATMega8, da der 902312 für den rest nicht reichen wird
' - Uhr stellen über RC5, braucht Timer0
' - Wecker
' - DCF77 empfang
' - Datum zusätzliche über Alphanumerische anzeigen
'
'
' History:
' - V2.3.3 wird ein taster zum uhr stellen länger betätigt> schnellvorlauf
' - V2.3.2 beim uhr stellen die sekunden auf null setzen
' - V2.3.1 Uhren Code aus dem Inetrupt Label ind die Hauptschleife verschoben.
' - V2.3 Uhren Code umgeschrieben; jede Ziffer wir jetzt einzelnt gezählt,
' Function Bcdzahl und Label Multiplex wir überflüssig.
' Die Uhr ist jetzt einstellbar.
' - V2.2 Bugy <ö#+Q@
' - V2.1 Uhr geeicht auf 4MHz > Load_timer1 = 62755
' - V2.0 erster Hardware test
' - V1.0 nur am PC getestet
'
' HW Stack: 40 ; SW Stack 20 ; Framesize: 16
'
'************************************************* ******************************


' µC Deklarationen
$regfile = "2313def.dat" 'AT90S2313-Deklarationen
$crystal = 4000000


' Variablen
Dim Temp_ziffer As Byte 'welche ziffer soll bearbeitet werden
Dim Bcd_aus As Byte 'enthält den Wert der dez zahl die ausgegeben werden soll

Dim Ausgang As Byte 'Segmentfolge die Ausgegeben wird aus Segmentcode - Tabelle
Dim Sek_blink As Bit 'Blinkt im Sekunden Takt

Dim Zl_sekunde As Byte 'Zeit Variablen
Dim Zl_minute As Byte 'enthalten die Uhrzeit
Dim Zl_stunde As Byte 'Zl-... => Low Wert der Zeit
Dim Zh_sekunde As Byte 'Zh-... => High Wert der Zeit
Dim Zh_minute As Byte
Dim Zh_stunde As Byte

'Dim A As Byte
'Dim B As Byte
'Dim B1 As Byte
'A = 1

' Ein-/Ausgänge
Config Portb = Output
Portb = Ausgang 'Port B als Ausgang
Ddrd = &B1111111
Config Portd = Input
Ddrd = &B11111000 '1 Ausgang, 0 Eingang
Portd = &B0000111 'pull up w.




'Eingänge:
T_min_stellen Alias Pind.0
T_h_stellen Alias Pind.1
Licht Alias Pind.2

' Sonstiges
Const Load_timer1 = 62755 'Konstande auf die der Timer1 geladen wird
'4MHz = 62755 | 62760 etwas zu langsam <> 62750 etwas zu schnell



'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
' Timer0 für Multiplexausgabe
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

'On Timer0 7segment 'Interrupt-Routine für Timer0-Overflow
'Config Timer0 = Timer , Prescale = 1 'Takt: Quarz/Prescale (möglich: 1, 8, 64, 256, 1024)
'Enable Timer0 'Timer0-Overflow-Interrupt einschalten


'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
' Timer 1 als Zeitbasis
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

On Timer1 Sekunde_plus 'Interrupt-Routine für Timer1-Overflow
Config Timer1 = Timer , Prescale = 64 'Takt: Quarz/Prescale (möglich: 1, 8, 64, 256, 1024)
Enable Timer1 'Timer0-Overflow-Interrupt einschalten
Enable Interrupts 'Interrupts global zulassen
Load Timer1 , Load_timer1 'Lädt den Timer auf einen wert vor


'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
' Hauptprogramm
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++


Do 'Start Hauptschleife


' ### Uhren Code ###
' Es wird für jede Ziffer einzelnd gezählt, das ermöglicht eine einfacher ausgabe
' auf den 7segmentanzeigen. Der Zählvorgang funktioniert ím prinzip wie z.B.
' bei einem normalen Logik Zähler-IC

If Zl_sekunde = 10 Then 'Wenn der Sekunden Low Wert = 10
Zl_sekunde = 0 'wird er auf 0 gesetzt
Incr Zh_sekunde 'und der High Wert um eins erhöht
If Zh_sekunde = 6 Then 'Ist der High Wert 6 (entspricht 60 Sekunden)
Zh_sekunde = 0 'wird er auf 0 gesetzt
Incr Zl_minute 'und der Minuten Low Wert um eins erhöht
End If
End If


If Zl_minute = 10 Then
Zl_minute = 0
Incr Zh_minute
End If
If Zh_minute = 6 Then
Zh_minute = 0
Incr Zl_stunde
End If


If Zl_stunde = 10 Then
Zl_stunde = 0
Incr Zh_stunde
End If
If Zh_stunde = 2 And Zl_stunde = 4 Then
Zl_stunde = 0
Zh_stunde = 0
End If



' ### Uhr stellen ###
' Wird der Taster "T_min_stellen" betätigt werden die Minuten um eins erhöht.
' Wird der Taster "T_h_stellen" betätigt werden die Stunden um eins erhöht.
' Werden beide gleichzeitig betätigt werden Stunden und Minuten auf Null gesetzt.
' Wird einer der Taster länger betätigt (> 150ms) gibt es einen schnellvorlauf

If T_min_stellen = 0 Then 'Wird "T_min_stellen" betätigt
Waitms 1 'Entprellen
If T_min_stellen = 0 Then 'Ist der Taster immer noch betätigt
Incr Zl_minute 'wird Minute um eins erhöht
Zl_sekunde = 0 'Sekunden auf Null setzen
Zh_sekunde = 0
End If
End If


If T_h_stellen = 0 Then
Waitms 1
If T_h_stellen = 0 Then
Incr Zl_stunde
Zl_sekunde = 0
Zh_sekunde = 0
End If
End If


If T_min_stellen = 0 And T_h_stellen = 0 Then 'Wenn "T_Min_stellen" und "T_H_stellen" gleichzeitig betätigt
Zl_minute = 0 'dann werden Minuten und Stunden auf 0 gestzt
Zh_minute = 0
Zl_stunde = 0
Zh_stunde = 0
End If



'Loop 'Ende Hauptschleife

'End 'Programm Ende


'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
' Bei jedem Aufruf wir nur eine Ziffer ausgegeben, d.h nur eine Anzeige wird
' angesteuert. Die anderen bleiben dunkel. Bei jedem Aufruf wird eine Anzeige
' weitergeschaltet.
'
' Anzeigen anordnung
'
' 1111 2222 3333 4444
' 1 1 2 2 3 3 4 4
' 1111 2222 3333 4444
' 1 1 2 2 3 3 4 4
' 1111o 2222o 3333o 4444o
'
' ^-- Dezimalpunkt
' ^---- 4. Ziffer | Minute Low Wert | Variable Zl_minute
' ^---------- 3. Ziffer | Minute High Wert | Variable Zh_minute
' ^----------------- 2. Ziffer | Stunde Low Wert | Variable Zl_stunde
' ^----------------------- 1. Ziffer | Stunde High Wert | Variable Zh_stunde


'7segment:
If Licht = 0 Then


If Temp_ziffer = 4 Then Temp_ziffer = 0 'bestimmt die auszugebende Ziffer (1 bis 4)
Incr Temp_ziffer 'bei jedem aufruf des Lable wir eine andere Ziffer ausgegeben

Select Case Temp_ziffer 'welche Ziffer soll angesteuert werden
Case 1 : Bcd_aus = Zh_stunde
Case 2 : Bcd_aus = Zl_stunde
Case 3 : Bcd_aus = Zh_minute
Case 4 : Bcd_aus = Zl_minute
End Select



Select Case Bcd_aus
Case 1 : Ausgang = Lookup(1 , Segmentfolge)
Case 2 : Ausgang = Lookup(2 , Segmentfolge)
Case 3 : Ausgang = Lookup(3 , Segmentfolge)
Case 4 : Ausgang = Lookup(4 , Segmentfolge)
Case 5 : Ausgang = Lookup(5 , Segmentfolge)
Case 6 : Ausgang = Lookup(6 , Segmentfolge)
Case 7 : Ausgang = Lookup(7 , Segmentfolge)
Case 8 : Ausgang = Lookup(8 , Segmentfolge)
Case 9 : Ausgang = Lookup(9 , Segmentfolge)
Case 0 And Temp_ziffer = 1 : Ausgang = Lookup(10 , Segmentfolge) 'Nullstellenunterdrückung bei der ersten Ziffer
Case 0 And Temp_ziffer > 1 : Ausgang = Lookup(0 , Segmentfolge) 'wenn nicht erste Ziffer Null anzeigen
End Select
Portb = Ausgang

'Ausgabe des 7 Segmentcodes (Invertierend [Not] bei Anz. mit gem. Anode)

End If
Portb = 0
Loop
'Return
End

'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
' Interrupt-Routine für Timer1 / Zeitbasis
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

Sekunde_plus:


Load Timer1 , Load_timer1 'Lädt den Timer auf einen wert vor

Incr Zl_sekunde 'Erhöht den Low Wert der Sekunde um eins

Toggle Sek_blink 'Ändert sich jede Sek., 1sec an 1sec aus


Return


' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


Segmentfolge: 'GFEDCBA / "1" Segment AN
Data 126 , 131 , 133 , 137 , 145 , 161 , 193 , 126 '0
Data 0 , 1 , 33 , 97 , 255 , 1 , 1 , 0 '1
Data 33 , 67 , 133 , 137 , 145 , 161 , 65 , 1 '2
Data 130 , 129 , 129 , 145 , 145 , 145 , 145 , 110 '3
Data 4 , 12 , 20 , 36 , 68 , 132 , 255 , 4 '4
Data 226 , 145 , 145 , 145 , 145 , 145 , 145 , 142 '5
Data 62 , 81 , 145 , 145 , 145 , 145 , 145 , 142 '6
Data 128 , 128 , 128 , 128 , 143 , 144 , 160 , 192 '7
Data 110 , 145 , 145 , 145 , 145 , 145 , 145 , 110 '8
Data 112 , 145 , 145 , 145 , 145 , 145 , 145 , 126 '9
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen