PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : lichtleiste progrmmieren



mollyman
01.11.2008, 07:51
ich möchte eine lichtersteuerung erzeugen die Kennungen erzeugt

Beispiel:
Minuten 1 2 3 4
Licht 1 Portc.0 0 1 0 1
Licht 2 Portc.1 0 0 1 1
Licht 3 Portc.2 0 0 0 1

derzeit sieht der code so aus


do
Portc.0 = 0 : Portc.1 = 0 : Portc.2 = 0
Waitms 1000 :
Portc.0 = 1
.....
loop


kann ich das auch so machen ?

do
Portc. = 0
Waitms 1000 :
Portc = 1
Waitms 1000 :
Portc = 2.....
loop

danke für die Hilfe

Gruß molly

Dirk
01.11.2008, 10:12
Hallo mollyman,

nach deinem Beispiel scheint ja ein reiner "Zähler" nicht zu funktionieren, da du nach 0 (1. Minute) auf 1 (2. Min), dann auf 2, dann aber auf 7 (4. Min) wechselst.
Du kannst das aber genau wie in deinem "derzeitigen" Code mit binären Zahlen machen (ist ein bißchen selbsterklärender! Natürlich geht auch Portc = 2 in der 3. Min.!):
Portc = &B00000000 '1. Min.
Portc = &B00000001 '2. Min.
Portc = &B00000010 '3. Min.
Portc = &B00000111 '4. Min.

Was praktischer ist (also ein Zähler a la Portc = Zaehler oder eine feste Zuordnung mit einer Konstante), ist in diesem kurzen Code nicht so wichtig. Wenn das aber mit den Lichtern noch weiter geht (mehr als 4 Lichter, mehrere "Codes"), dann könnte das schon relevant sein.

Gruß Dirk

mollyman
01.11.2008, 10:39
ja da hängt noch mehr dran

es sind 9 verschiedene Lichttakte mit unterschiedlichen laufzeiten ( von 4-15 s)

allerdings müssen alle parallel in einer endlosschleife funktionieren.

mhh ok anders formuliert das licht mit 4 Sekunden muss nach ablauf des ersten Taktes wieder von vorne beginnen, wobei das mit dem 15 Sekunden takt noch läuft. wichtig ist das alle 9 Takte immer parallel laufen

da der kleinste gemeinsame nenner 360 ist müsste ich allso 360 takte programmieren. das passt dann aber wohl vom Speicher her nicht daher habe ich es auf 2 Atmega 8, einem mit 5 und einem mit 4 lichtern, geplant

der Hinweis mit den Variabelen finde ich gut, nur geht das . Meine Denke ist das ich für jeden Port/licht eine Variabele anlege und dort den takt definiere und dann alle variabelen gleichzeitig abluafen lasse.

nur habe ich keine Idee wie das vom Programmaufbau her funktionieren soll.

Gruß Martin

Dirk
01.11.2008, 11:57
Hallo mollyman,

nein, dafür brauchst du keine 2 uCs!
Damit ist selbst einer noch deutlich unterfordert, ein Tiny würde reichen.

Die Datenbytes (z.B. 360 Stück) könntest du im Programm als Data Zeilen anlegen und mit Read darauf zu greifen.

Sieh dir 'mal die Beispiele in der Bascom-Hilfe dazu an.

Gruß Dirk

s.o.
01.11.2008, 15:56
Mein Bescheindener hinweis wäre ähnlich dem von Dirk.

Du legst im Flash ein Dataarray an, indem du die Reihenfolge der Leds schreibst. Diesen liest du immer aus und gibst ihn über die Ports aus. Eine Warteschleife definiert dann die Zeit bis zum neuladen.

Pseudocode:

zaehler=0
Schleife start
-zaehler++
-loadfromflash(zaehler)
-gebe auf ports aus
-wenn zaehler größer als maxwert: zaehler=0
-warteschleife
Schleife ende

mollyman
01.11.2008, 17:15
ok

habe mir mal die Hilfen im Bascom angesehen:


Wenn ich also die Datenreihen anlege muss ich ja für jeden Takt 2 Datenreihen anlegen einmal für die ausgänge c0-c7 und einmal die "Datenreihe" für B0

Data1-0:
DATA 00101011&

Data1-1:
DATA 1&

Data2-0:
DATA 10110110&

Data2-1:
DATA 0&

dann brauche ich noch einen Zähler der eine Variabele hochzählt und irgendwas das dann die Variabele mit dem Counter verbindet um dann mit dem READ befehel dieser neuen Variabele dann die Datenreihen abrufen zu können.

Das ganze ist sicher eine Interessanter Ansatz, aber ich gleube für mich zu hoch und nicht zweckmäßig, da ich dabei ja sehr vielen Speicher für die vielen Programmzeilen benötige.

Das war auch der Grund warum ich auf 2 Atmega gewechselt bin. Wenn ich mit meiner alten weise PoRtc1=1: .... usw die 360 Takte abbilde benötige ich mehr speicher als der Atmel mir zu verfügung stellt für das Programm, so sagt es zumindest Bascom.

Gerne würde ich es auf einen Atmega8 reduzieren. Vielleicht habe ich aber auch was übersehen. mit der Darstellung der Bits als Zahl dürfte ich eine Menge Zeichen einsparen, dann könnte es villeicht passen, oder gibt es da andere möglichkeiten ?

gruß Martin

s.o.
01.11.2008, 17:47
Zu hoch für einen Controller? LOL!
Ich wette mit dir dass du/man das mit einem Tiny13 schaffst. MIt Assembler kann man es selbst mit dem Tiny11 machen.

Pass mal auf; da ich kein bascom kann, da es von mir abgelehnt wird (deprecated), gibt es von mir hier die Lösung wie ich sie in C machen würde:

Du machst einen C Array, den du ins FLASH legst. Den liest du das mit prog_read_byte(deinarray[deincounter]) aus und setzt mit dem Wert dann deinen Port. Der Zähler soltle ja kein Problem sein,

Ich glaube dein Problem ist eher, dass du denkst, dass du etwas gelöschen musst. Du musst nichts löschen, sondern du setzt den PIN immer neu (und löscht ihn auch so indirekt!)

Schreib mal auf wann die einzelnen Lampen leuchten sollen (in form einer Tabelle): Zeit, Lampe1, Lampe2, Lampe3, Lampe4. (an=1 off=0)

for_ro
01.11.2008, 21:27
Licht 1 Portc.0 0 1 0 1
Licht 2 Portc.1 0 0 1 1
Licht 3 Portc.2 0 0 0 1


Hallo,
kannst du nicht mal genauer beschreiben, in welcher Abfolge jede einzelne LED angehen soll?
Ist dies z.B. die Fortsezung von deinem "Beispiel":

Licht 1 Portc.0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1xan, 1x aus
Licht 2 Portc.1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 2xan, 2x aus
Licht 3 Portc.2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 4xan, 4x aus
Licht 4 Portc.3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 8xan, 8x aus

Wenn ja, dann gibt es ja viel simplere Ansteuerungen für den PortC.

Gruß

Rolf

mollyman
02.11.2008, 18:33
Danke für Eure Hilfe.

Also das ich den Zustand des Ports immer nur neu setze, dem war ich mir bewusst.

Mein erster Versuch für einen Atmel sieht so aus:

$regfile "m8def.dat"
$crystal = 1000000

Config Portc = Output

Do
Portc.0 = 1 : Portc.1 = 0 : Portc.2 = 0 : Portc.3 = 0 : Portc.4 = 1
Waitms 1000 :
Portc.0 = 0 : Portc.1 = 1 : Portc.2 = 1 : Portc.4 = 0
Waitms 1000
Portc.2 = 0 : Portc.3 = 1
Waitms 1000
Portc.0 = 1
Waitms 1000
Portc.0 = 0 : Portc.2 = 1 : Portc.3 = 0 : Portc.4 = 1
Waitms 1000
Portc.2 = 0 : Portc.4 = 0
Waitms 1000
Portc.1 = 0 : Portc.3 = 1
Waitms 1000
Portc.1 = 1
Waitms 1000
Portc.3 = 0 : Portc.4 = 1
Waitms 1000
Portc.0 = 1 : Portc.4 = 0
Waitms 1000
Portc.0 = 0 : Portc.2 = 1 : Portc.3 = 1
Waitms 1000
Portc.2 = 0
Waitms 1000
Portc.0 = 1 : Portc.1 = 0 : Portc.3 = 0 : Portc.4 = 1
Waitms 1000
Portc.0 = 0 : Portc.1 = 1 : Portc.2 = 1 : Portc.4 = 0
Waitms 1000
Portc.0 = 0 : Portc.1 = 1 : Portc.2 = 1 : Portc.4 = 0
Waitms 1000
Portc.2 = 0 : Portc.3 = 1 :
Waitms 2000
Portc.3 = 0 : Portc.4 = 1
Waitms 1000
Portc.4 = 1
Waitms 1000
Portc.0 = 1 : Portc.1 = 0 : Portc.3 = 1
Waitms 1000
Portc.0 = 0 : Portc.1 = 1 : Portc.2 = 1 : Portc.4 = 0
Waitms 1000
Portc.2 = 0 : Portc.3 = 0 : Portc.4 = 1
Waitms 1000
Portc.0 = 1 : Portc.4 = 0
Waitms 1000
Portc.0 = 0 : Portc.2 = 1 : Portc.3 = 1
Waitms 1000
Portc.3 = 0
Waitms 1000
Portc.1 = 0 : Portc.3 = 0 : Portc.4 = 1
Waitms 1000
Portc.1 = 1 : Portc.4 = 0
Waitms 1000
Portc.3 = 1
Waitms 1000
Portc.0 = 1
Waitms 1000
Portc.0 = 0 : Portc.2 = 1 : Portc.3 = 0 : Portc.4 = 1
Waitms 1000
Portc.2 = 0 : Portc.4 = 0
Waitms 1000
Portc.0 = 1 : Portc.1 = 0 : Portc.3 = 1
Waitms 1000
Portc.0 = 0 : Portc.1 = 1 : Portc.2 = 1
Waitms 1000
Portc.2 = 0 : Portc.3 = 0 : Portc.4 = 1
Waitms 1000
Portc.4 = 0
Waitms 1000
Portc.3 = 1
Waitms 2000

Loop


ich habe also nur den erstzutsand definiert und habe dann nur die Veränderungen Programmiert.

Dieses sind aber nur 5 der 9 Ports und der 7,5 sekunden ist auch nicht dabei. das sind 36 Takte. Hier sagt mir Bascom ich hätte bereits 6 % des Speichers benötigt. Da es aber nur 1/10 der Takte eigentlich sogar nur 1/20 der Takte(halbsekundentakte sind ja auch dabei) und auch nur für 5 statt für 9 Ports ist konnte ich also Hochrechnen, das ich mit dem Speicher nicht klarkomme.

Zu den Takten selbst
Es sind zwei unterschiedliche Takte a 15 Sekunden 3 unterschiedliche a 4 Sekunden , einer mit 5, einer mit 6, einer mit 7,5 und einer mit 9 Sekunden

also ist die Taktfolge für einen Durchlauf aller Takte


Sekunde C-4 C-3 C-2 C-1 C-0 c-5 c-6 c-7 b-0
0,5 1 0 0 0 1 1 0 1 1
1 1 0 0 0 1 1 0 1 1
1,5 0 0 1 1 0 0 1 0 1
2 0 0 1 1 0 0 1 0 1
2,5 0 1 0 1 0 0 1 0 0
3 0 1 0 1 0 0 1 0 0
3,5 0 1 0 1 1 0 1 1 0
4 0 1 0 1 1 0 1 1 0
4,5 1 0 1 1 0 0 1 0 0
5 1 0 1 1 0 0 1 0 0
5,5 0 0 0 1 0 0 0 0 1
6 0 0 0 1 0 0 0 0 1
6,5 0 1 0 0 0 0 1 0 1
7 0 1 0 0 0 0 1 0 1
7,5 0 1 0 1 0 1 1 1 0
8 0 1 0 1 0 1 1 1 0
8,5 1 0 0 1 0 0 1 0 0
9 1 0 0 1 0 0 1 0 0
9,5 0 0 0 1 1 0 1 0 0
10 0 0 0 1 1 0 1 0 0
10,5 0 1 1 1 0 0 0 0 0
11 0 1 1 1 0 0 0 0 0
11,5 0 1 0 1 0 0 1 0 0
12 0 1 0 1 0 0 1 0 0
12,5 1 0 0 0 1 0 1 0 0
13 1 0 0 0 1 0 1 0 0
13,5 0 0 1 1 0 0 1 0 0
14 0 0 1 1 0 0 1 0 0
14,5 0 1 0 1 0 0 1 0 0
15 0 1 0 1 0 0 1 0 0
15,5 0 1 0 1 0 1 0 1 1
16 0 1 0 1 0 1 0 1 1
16,5 1 0 0 1 0 0 1 0 1
17 1 0 0 1 0 0 1 0 1
17,5 0 0 0 1 0 0 1 0 0
18 0 0 0 1 0 0 1 0 0
18,5 0 1 0 0 1 0 1 1 0
19 0 1 0 0 1 0 1 1 0
19,5 0 1 1 1 0 0 1 0 0
20 0 1 1 1 0 0 1 0 0
20,5 1 0 0 1 0 0 0 0 1
21 1 0 0 1 0 0 0 0 1
21,5 0 0 0 1 1 0 1 0 1
22 0 0 0 1 1 0 1 0 1
22,5 0 1 1 1 0 1 1 1 0
23 0 1 1 1 0 1 1 1 0
23,5 0 1 0 1 0 0 1 0 0
24 0 1 0 1 0 0 1 0 0
24,5 1 0 0 0 0 0 1 0 0
25 1 0 0 0 0 0 1 0 0
25,5 0 0 0 1 0 0 0 0 0
26 0 0 0 1 0 0 0 0 0
26,5 0 1 0 1 0 0 1 0 0
27 0 1 0 1 0 0 1 0 0
27,5 0 1 0 1 1 0 1 0 0
28 0 1 0 1 1 0 1 0 0
28,5 1 0 1 1 0 0 1 0 0
29 1 0 1 1 0 0 1 0 0
29,5 0 0 0 1 0 0 1 0 0
30 0 0 0 1 0 0 1 0 0
30,5 0 1 0 0 1 1 0 1 1
31 0 1 0 0 1 1 0 1 1
31,5 0 1 1 1 0 0 1 0 1
32 0 1 1 1 0 0 1 0 1
32,5 1 0 0 1 0 0 1 0 0
33 1 0 0 1 0 0 1 0 0
33,5 0 0 0 1 0 0 1 1 0
34 0 0 0 1 0 0 1 1 0
34,5 0 1 0 1 0 0 1 0 0
35 0 1 0 1 0 0 1 0 0
35,5 0 1 0 1 0 0 0 0 1
36 0 1 0 1 0 0 0 0 1



Die Darstellung hier finde ich nicht sehr vorteilhaft, daher habe ich Sie noch als Excel-Tabelle angefügt.

Wobei ich dazu sagen muss dieses Projekt ist mein erstes dieser Art und meine Programmiererfahrung ist ein halbes Jahr Programmierung eineml die Woche 90 Minuten in der Schule in Turbopascal vor 15 Jahren und noch länger her die Programmierung in Basic vor 18 Dort haben wir aber auch zum Beispiel Lauflichter direkt an der paralelen Schnittstelle programmiert.

mit mikroControllern ist das die erste Berührung.

Eigentlich sollte das ganze über NE 555 gebaut werden, aber den takt C-7 habe ich damit nicht geschafft. Daher die Sache mit dem Controller zumal dder Platinenbedarf hinter dem Bild so nur ein bruchteil beträgt.[/code]

Edit ich musste den Code etwas einkürzen, da ich über die Zeichenbegrenzug des Postes gekommen bin

mollyman
02.11.2008, 18:47
hier die kompletten Takte:

Sekunde C-4 C-3 C-2 C-1 C-0 c-5 c-6 c-7 b-0
0,5 1 0 0 0 1 1 0 1 1
1 1 0 0 0 1 1 0 1 1
1,5 0 0 1 1 0 0 1 0 1
2 0 0 1 1 0 0 1 0 1
2,5 0 1 0 1 0 0 1 0 0
3 0 1 0 1 0 0 1 0 0
3,5 0 1 0 1 1 0 1 1 0
4 0 1 0 1 1 0 1 1 0
4,5 1 0 1 1 0 0 1 0 0
5 1 0 1 1 0 0 1 0 0
5,5 0 0 0 1 0 0 0 0 1
6 0 0 0 1 0 0 0 0 1
6,5 0 1 0 0 0 0 1 0 1
7 0 1 0 0 0 0 1 0 1
7,5 0 1 0 1 0 1 1 0 0
8 0 1 0 1 0 1 1 0 0
8,5 1 0 0 1 0 0 1 1 0
9 1 0 0 1 0 0 1 1 0
9,5 0 0 0 1 1 0 1 0 0
10 0 0 0 1 1 0 1 0 0
10,5 0 1 1 1 0 0 0 0 0
11 0 1 1 1 0 0 0 0 0
11,5 0 1 0 1 0 0 1 0 0
12 0 1 0 1 0 0 1 0 0
12,5 1 0 0 0 1 0 1 0 0
13 1 0 0 0 1 0 1 0 0
13,5 0 0 1 1 0 0 1 0 0
14 0 0 1 1 0 0 1 0 0
14,5 0 1 0 1 0 0 1 0 0
15 0 1 0 1 0 0 1 0 0
15,5 0 1 0 1 0 1 0 1 1
16 0 1 0 1 0 1 0 1 1
16,5 1 0 0 1 0 0 1 0 1
17 1 0 0 1 0 0 1 0 1
17,5 0 0 0 1 0 0 1 0 0
18 0 0 0 1 0 0 1 0 0
18,5 0 1 0 0 1 0 1 1 0
19 0 1 0 0 1 0 1 1 0
19,5 0 1 1 1 0 0 1 0 0
20 0 1 1 1 0 0 1 0 0
20,5 1 0 0 1 0 0 0 0 1
21 1 0 0 1 0 0 0 0 1
21,5 0 0 0 1 1 0 1 0 1
22 0 0 0 1 1 0 1 0 1
22,5 0 1 1 1 0 1 1 0 0
23 0 1 1 1 0 1 1 0 0
23,5 0 1 0 1 0 0 1 1 0
24 0 1 0 1 0 0 1 1 0
24,5 1 0 0 0 0 0 1 0 0
25 1 0 0 0 0 0 1 0 0
25,5 0 0 0 1 0 0 0 0 0
26 0 0 0 1 0 0 0 0 0
26,5 0 1 0 1 0 0 1 0 0
27 0 1 0 1 0 0 1 0 0
27,5 0 1 0 1 1 0 1 0 0
28 0 1 0 1 1 0 1 0 0
28,5 1 0 1 1 0 0 1 0 0
29 1 0 1 1 0 0 1 0 0
29,5 0 0 0 1 0 0 1 0 0
30 0 0 0 1 0 0 1 0 0
30,5 0 1 0 0 1 1 0 1 1
31 0 1 0 0 1 1 0 1 1
31,5 0 1 1 1 0 0 1 0 1
32 0 1 1 1 0 0 1 0 1
32,5 1 0 0 1 0 0 1 0 0
33 1 0 0 1 0 0 1 0 0
33,5 0 0 0 1 0 0 1 1 0
34 0 0 0 1 0 0 1 1 0
34,5 0 1 0 1 0 0 1 0 0
35 0 1 0 1 0 0 1 0 0
35,5 0 1 0 1 0 0 0 0 1
36 0 1 0 1 0 0 0 0 1
36,5 1 0 0 0 1 0 1 0 1
37 1 0 0 0 1 0 1 0 1
37,5 0 0 1 1 0 1 1 0 0
38 0 0 1 1 0 1 1 0 0
38,5 0 1 0 1 0 0 1 1 0
39 0 1 0 1 0 0 1 1 0
39,5 0 1 0 1 1 0 1 0 0
40 0 1 0 1 1 0 1 0 0
40,5 1 0 1 1 0 0 0 0 0
41 1 0 1 1 0 0 0 0 0
41,5 0 0 0 1 0 0 1 0 0
42 0 0 0 1 0 0 1 0 0
42,5 0 1 0 0 0 0 1 0 0
43 0 1 0 0 0 0 1 0 0
43,5 0 1 0 1 0 0 1 0 0
44 0 1 0 1 0 0 1 0 0
44,5 1 0 0 1 0 0 1 0 0
45 1 0 0 1 0 0 1 0 0
45,5 0 0 0 1 1 1 0 1 1
46 0 0 0 1 1 1 0 1 1
46,5 0 1 1 1 0 0 1 0 1
47 0 1 1 1 0 0 1 0 1
47,5 0 1 0 1 0 0 1 0 0
48 0 1 0 1 0 0 1 0 0
48,5 1 0 0 0 1 0 1 1 0
49 1 0 0 0 1 0 1 1 0
49,5 0 0 1 1 0 0 1 0 0
50 0 0 1 1 0 0 1 0 0
50,5 0 1 0 1 0 0 0 0 1
51 0 1 0 1 0 0 0 0 1
51,5 0 1 0 1 0 0 1 0 1
52 0 1 0 1 0 0 1 0 1
52,5 1 0 0 1 0 1 1 0 0
53 1 0 0 1 0 1 1 0 0
53,5 0 0 0 1 0 0 1 1 0
54 0 0 0 1 0 0 1 1 0
54,5 0 1 0 0 1 0 1 0 0
55 0 1 0 0 1 0 1 0 0
55,5 0 1 1 1 0 0 0 0 0
56 0 1 1 1 0 0 0 0 0
56,5 1 0 0 1 0 0 1 0 0
57 1 0 0 1 0 0 1 0 0
57,5 0 0 0 1 1 0 1 0 0
58 0 0 0 1 1 0 1 0 0
58,5 0 1 1 1 0 0 1 0 0
59 0 1 1 1 0 0 1 0 0
59,5 0 1 0 1 0 0 1 0 0
60 0 1 0 1 0 0 1 0 0
60,5 1 0 0 0 0 1 0 1 1
61 1 0 0 0 0 1 0 1 1
61,5 0 0 0 1 0 0 1 0 1
62 0 0 0 1 0 0 1 0 1
62,5 0 1 0 1 0 0 1 0 0
63 0 1 0 1 0 0 1 0 0
63,5 0 1 0 1 1 0 1 1 0
64 0 1 0 1 1 0 1 1 0
64,5 1 0 1 1 0 0 1 0 0
65 1 0 1 1 0 0 1 0 0
65,5 0 0 0 1 0 0 0 0 1
66 0 0 0 1 0 0 0 0 1
66,5 0 1 0 0 1 0 1 0 1
67 0 1 0 0 1 0 1 0 1
67,5 0 1 1 1 0 1 1 0 0
68 0 1 1 1 0 1 1 0 0
68,5 1 0 0 1 0 0 1 1 0
69 1 0 0 1 0 0 1 1 0
69,5 0 0 0 1 0 0 1 0 0
70 0 0 0 1 0 0 1 0 0
70,5 0 1 0 1 0 0 0 0 0
71 0 1 0 1 0 0 0 0 0
71,5 0 1 0 1 0 0 1 0 0
72 0 1 0 1 0 0 1 0 0
72,5 1 0 0 0 1 0 1 0 0
73 1 0 0 0 1 0 1 0 0
73,5 0 0 1 1 0 0 1 0 0
74 0 0 1 1 0 0 1 0 0
74,5 0 1 0 1 0 0 1 0 0
75 0 1 0 1 0 0 1 0 0
75,5 0 1 0 1 1 1 0 1 1
76 0 1 0 1 1 1 0 1 1
76,5 1 0 1 1 0 0 1 0 1
77 1 0 1 1 0 0 1 0 1
77,5 0 0 0 1 0 0 1 0 0
78 0 0 0 1 0 0 1 0 0
78,5 0 1 0 0 0 0 1 1 0
79 0 1 0 0 0 0 1 1 0
79,5 0 1 0 1 0 0 1 0 0
80 0 1 0 1 0 0 1 0 0
80,5 1 0 0 1 0 0 0 0 1
81 1 0 0 1 0 0 0 0 1
81,5 0 0 0 1 1 0 1 0 1
82 0 0 0 1 1 0 1 0 1
82,5 0 1 1 1 0 1 1 0 0
83 0 1 1 1 0 1 1 0 0
83,5 0 1 0 1 0 0 1 1 0
84 0 1 0 1 0 0 1 1 0
84,5 1 0 0 0 1 0 1 0 0
85 1 0 0 0 1 0 1 0 0
85,5 0 0 1 1 0 0 0 0 0
86 0 0 1 1 0 0 0 0 0
86,5 0 1 0 1 0 0 1 0 0
87 0 1 0 1 0 0 1 0 0
87,5 0 1 0 1 0 0 1 0 0
88 0 1 0 1 0 0 1 0 0
88,5 1 0 0 1 0 0 1 0 0
89 1 0 0 1 0 0 1 0 0
89,5 0 0 0 1 0 0 1 0 0
90 0 0 0 1 0 0 1 0 0
90,5 0 1 0 0 1 1 0 1 1
91 0 1 0 0 1 1 0 1 1
91,5 0 1 1 1 0 0 1 0 1
92 0 1 1 1 0 0 1 0 1
92,5 1 0 0 1 0 0 1 0 0
93 1 0 0 1 0 0 1 0 0
93,5 0 0 0 1 1 0 1 1 0
94 0 0 0 1 1 0 1 1 0
94,5 0 1 1 1 0 0 1 0 0
95 0 1 1 1 0 0 1 0 0
95,5 0 1 0 1 0 0 0 0 1
96 0 1 0 1 0 0 0 0 1
96,5 1 0 0 0 0 0 1 0 1
97 1 0 0 0 0 0 1 0 1
97,5 0 0 0 1 0 1 1 0 0
98 0 0 0 1 0 1 1 0 0
98,5 0 1 0 1 0 0 1 1 0
99 0 1 0 1 0 0 1 1 0
99,5 0 1 0 1 1 0 1 0 0
100 0 1 0 1 1 0 1 0 0
100,5 1 0 1 1 0 0 0 0 0
101 1 0 1 1 0 0 0 0 0
101,5 0 0 0 1 0 0 1 0 0
102 0 0 0 1 0 0 1 0 0
102,5 0 1 0 0 1 0 1 0 0
103 0 1 0 0 1 0 1 0 0
103,5 0 1 1 1 0 0 1 0 0
104 0 1 1 1 0 0 1 0 0
104,5 1 0 0 1 0 0 1 0 0
105 1 0 0 1 0 0 1 0 0
105,5 0 0 0 1 0 1 0 1 1
106 0 0 0 1 0 1 0 1 1
106,5 0 1 0 1 0 0 1 0 1
107 0 1 0 1 0 0 1 0 1
107,5 0 1 0 1 0 0 1 0 0
108 0 1 0 1 0 0 1 0 0
108,5 1 0 0 0 1 0 1 1 0
109 1 0 0 0 1 0 1 1 0
109,5 0 0 1 1 0 0 1 0 0
110 0 0 1 1 0 0 1 0 0
110,5 0 1 0 1 0 0 0 0 1
111 0 1 0 1 0 0 0 0 1
111,5 0 1 0 1 1 0 1 0 1
112 0 1 0 1 1 0 1 0 1
112,5 1 0 1 1 0 1 1 0 0
113 1 0 1 1 0 1 1 0 0
113,5 0 0 0 1 0 0 1 1 0
114 0 0 0 1 0 0 1 1 0
114,5 0 1 0 0 0 0 1 0 0
115 0 1 0 0 0 0 1 0 0
115,5 0 1 0 1 0 0 0 0 0
116 0 1 0 1 0 0 0 0 0
116,5 1 0 0 1 0 0 1 0 0
117 1 0 0 1 0 0 1 0 0
117,5 0 0 0 1 1 0 1 0 0
118 0 0 0 1 1 0 1 0 0
118,5 0 1 1 1 0 0 1 0 0
119 0 1 1 1 0 0 1 0 0
119,5 0 1 0 1 0 0 1 0 0
120 0 1 0 1 0 0 1 0 0
120,5 1 0 0 0 1 1 0 1 1
121 1 0 0 0 1 1 0 1 1
121,5 0 0 1 1 0 0 1 0 1
122 0 0 1 1 0 0 1 0 1
122,5 0 1 0 1 0 0 1 0 0
123 0 1 0 1 0 0 1 0 0
123,5 0 1 0 1 0 0 1 1 0
124 0 1 0 1 0 0 1 1 0
124,5 1 0 0 1 0 0 1 0 0
125 1 0 0 1 0 0 1 0 0
125,5 0 0 0 1 0 0 0 0 1
126 0 0 0 1 0 0 0 0 1
126,5 0 1 0 0 1 0 1 0 1
127 0 1 0 0 1 0 1 0 1
127,5 0 1 1 1 0 1 1 0 0
128 0 1 1 1 0 1 1 0 0
128,5 1 0 0 1 0 0 1 1 0
129 1 0 0 1 0 0 1 1 0
129,5 0 0 0 1 1 0 1 0 0
130 0 0 0 1 1 0 1 0 0
130,5 0 1 1 1 0 0 0 0 0
131 0 1 1 1 0 0 0 0 0
131,5 0 1 0 1 0 0 1 0 0
132 0 1 0 1 0 0 1 0 0
132,5 1 0 0 0 0 0 1 0 0
133 1 0 0 0 0 0 1 0 0
133,5 0 0 0 1 0 0 1 0 0
134 0 0 0 1 0 0 1 0 0
134,5 0 1 0 1 0 0 1 0 0
135 0 1 0 1 0 0 1 0 0
135,5 0 1 0 1 1 1 0 1 1
136 0 1 0 1 1 1 0 1 1
136,5 1 0 1 1 0 0 1 0 1
137 1 0 1 1 0 0 1 0 1
137,5 0 0 0 1 0 0 1 0 0
138 0 0 0 1 0 0 1 0 0
138,5 0 1 0 0 1 0 1 1 0
139 0 1 0 0 1 0 1 1 0
139,5 0 1 1 1 0 0 1 0 0
140 0 1 1 1 0 0 1 0 0
140,5 1 0 0 1 0 0 0 0 1
141 1 0 0 1 0 0 0 0 1
141,5 0 0 0 1 0 0 1 0 1
142 0 0 0 1 0 0 1 0 1
142,5 0 1 0 1 0 1 1 0 0
143 0 1 0 1 0 1 1 0 0
143,5 0 1 0 1 0 0 1 1 0
144 0 1 0 1 0 0 1 1 0
144,5 1 0 0 0 1 0 1 0 0
145 1 0 0 0 1 0 1 0 0
145,5 0 0 1 1 0 0 0 0 0
146 0 0 1 1 0 0 0 0 0
146,5 0 1 0 1 0 0 1 0 0
147 0 1 0 1 0 0 1 0 0
147,5 0 1 0 1 1 0 1 0 0
148 0 1 0 1 1 0 1 0 0
148,5 1 0 1 1 0 0 1 0 0
149 1 0 1 1 0 0 1 0 0
149,5 0 0 0 1 0 0 1 0 0
150 0 0 0 1 0 0 1 0 0
150,5 0 1 0 0 0 1 0 1 1
151 0 1 0 0 0 1 0 1 1
151,5 0 1 0 1 0 0 1 0 1
152 0 1 0 1 0 0 1 0 1
152,5 1 0 0 1 0 0 1 0 0
153 1 0 0 1 0 0 1 0 0
153,5 0 0 0 1 1 0 1 1 0
154 0 0 0 1 1 0 1 1 0
154,5 0 1 1 1 0 0 1 0 0
155 0 1 1 1 0 0 1 0 0
155,5 0 1 0 1 0 0 0 0 1
156 0 1 0 1 0 0 0 0 1
156,5 1 0 0 0 1 0 1 0 1
157 1 0 0 0 1 0 1 0 1
157,5 0 0 1 1 0 1 1 0 0
158 0 0 1 1 0 1 1 0 0
158,5 0 1 0 1 0 0 1 1 0
159 0 1 0 1 0 0 1 1 0
159,5 0 1 0 1 0 0 1 0 0
160 0 1 0 1 0 0 1 0 0
160,5 1 0 0 1 0 0 0 0 0
161 1 0 0 1 0 0 0 0 0
161,5 0 0 0 1 0 0 1 0 0
162 0 0 0 1 0 0 1 0 0
162,5 0 1 0 0 1 0 1 0 0
163 0 1 0 0 1 0 1 0 0
163,5 0 1 1 1 0 0 1 0 0
164 0 1 1 1 0 0 1 0 0
164,5 1 0 0 1 0 0 1 0 0
165 1 0 0 1 0 0 1 0 0
165,5 0 0 0 1 1 1 0 1 1
166 0 0 0 1 1 1 0 1 1
166,5 0 1 1 1 0 0 1 0 1
167 0 1 1 1 0 0 1 0 1
167,5 0 1 0 1 0 0 1 0 0
168 0 1 0 1 0 0 1 0 0
168,5 1 0 0 0 0 0 1 1 0
169 1 0 0 0 0 0 1 1 0
169,5 0 0 0 1 0 0 1 0 0
170 0 0 0 1 0 0 1 0 0
170,5 0 1 0 1 0 0 0 0 1
171 0 1 0 1 0 0 0 0 1
171,5 0 1 0 1 1 0 1 0 1
172 0 1 0 1 1 0 1 0 1
172,5 1 0 1 1 0 1 1 0 0
173 1 0 1 1 0 1 1 0 0
173,5 0 0 0 1 0 0 1 1 0
174 0 0 0 1 0 0 1 1 0
174,5 0 1 0 0 1 0 1 0 0
175 0 1 0 0 1 0 1 0 0
175,5 0 1 1 1 0 0 0 0 0
176 0 1 1 1 0 0 0 0 0
176,5 1 0 0 1 0 0 1 0 0
177 1 0 0 1 0 0 1 0 0
177,5 0 0 0 1 0 0 1 0 0
178 0 0 0 1 0 0 1 0 0
178,5 0 1 0 1 0 0 1 0 0
179 0 1 0 1 0 0 1 0 0
179,5 0 1 0 1 0 0 1 0 0
180 0 1 0 1 0 0 1 0 0
180,5 1 0 0 0 1 1 0 1 1
181 1 0 0 0 1 1 0 1 1
181,5 0 0 1 1 0 0 1 0 1
182 0 0 1 1 0 0 1 0 1
182,5 0 1 0 1 0 0 1 0 0
183 0 1 0 1 0 0 1 0 0
183,5 0 1 0 1 1 0 1 1 0
184 0 1 0 1 1 0 1 1 0
184,5 1 0 1 1 0 0 1 0 0
185 1 0 1 1 0 0 1 0 0
185,5 0 0 0 1 0 0 0 0 1
186 0 0 0 1 0 0 0 0 1
186,5 0 1 0 0 0 0 1 0 1
187 0 1 0 0 0 0 1 0 1
187,5 0 1 0 1 0 1 1 0 0
188 0 1 0 1 0 1 1 0 0
188,5 1 0 0 1 0 0 1 1 0
189 1 0 0 1 0 0 1 1 0
189,5 0 0 0 1 1 0 1 0 0
190 0 0 0 1 1 0 1 0 0
190,5 0 1 1 1 0 0 0 0 0
191 0 1 1 1 0 0 0 0 0
191,5 0 1 0 1 0 0 1 0 0
192 0 1 0 1 0 0 1 0 0
192,5 1 0 0 0 1 0 1 0 0
193 1 0 0 0 1 0 1 0 0
193,5 0 0 1 1 0 0 1 0 0
194 0 0 1 1 0 0 1 0 0
194,5 0 1 0 1 0 0 1 0 0
195 0 1 0 1 0 0 1 0 0
195,5 0 1 0 1 0 1 0 1 1
196 0 1 0 1 0 1 0 1 1
196,5 1 0 0 1 0 0 1 0 1
197 1 0 0 1 0 0 1 0 1
197,5 0 0 0 1 0 0 1 0 0
198 0 0 0 1 0 0 1 0 0
198,5 0 1 0 0 1 0 1 1 0
199 0 1 0 0 1 0 1 1 0
199,5 0 1 1 1 0 0 1 0 0
200 0 1 1 1 0 0 1 0 0
200,5 1 0 0 1 0 0 0 0 1
201 1 0 0 1 0 0 0 0 1
201,5 0 0 0 1 1 0 1 0 1
202 0 0 0 1 1 0 1 0 1
202,5 0 1 1 1 0 1 1 0 0
203 0 1 1 1 0 1 1 0 0
203,5 0 1 0 1 0 0 1 1 0
204 0 1 0 1 0 0 1 1 0
204,5 1 0 0 0 0 0 1 0 0
205 1 0 0 0 0 0 1 0 0
205,5 0 0 0 1 0 0 0 0 0
206 0 0 0 1 0 0 0 0 0
206,5 0 1 0 1 0 0 1 0 0
207 0 1 0 1 0 0 1 0 0
207,5 0 1 0 1 1 0 1 0 0
208 0 1 0 1 1 0 1 0 0
208,5 1 0 1 1 0 0 1 0 0
209 1 0 1 1 0 0 1 0 0
209,5 0 0 0 1 0 0 1 0 0
210 0 0 0 1 0 0 1 0 0
210,5 0 1 0 0 1 1 0 1 1
211 0 1 0 0 1 1 0 1 1
211,5 0 1 1 1 0 0 1 0 1
212 0 1 1 1 0 0 1 0 1
212,5 1 0 0 1 0 0 1 0 0
213 1 0 0 1 0 0 1 0 0
213,5 0 0 0 1 0 0 1 1 0
214 0 0 0 1 0 0 1 1 0
214,5 0 1 0 1 0 0 1 0 0
215 0 1 0 1 0 0 1 0 0
215,5 0 1 0 1 0 0 0 0 1
216 0 1 0 1 0 0 0 0 1
216,5 1 0 0 0 1 0 1 0 1
217 1 0 0 0 1 0 1 0 1
217,5 0 0 1 1 0 1 1 0 0
218 0 0 1 1 0 1 1 0 0
218,5 0 1 0 1 0 0 1 1 0
219 0 1 0 1 0 0 1 1 0
219,5 0 1 0 1 1 0 1 0 0
220 0 1 0 1 1 0 1 0 0
220,5 1 0 1 1 0 0 0 0 0
221 1 0 1 1 0 0 0 0 0
221,5 0 0 0 1 0 0 1 0 0
222 0 0 0 1 0 0 1 0 0
222,5 0 1 0 0 0 0 1 0 0
223 0 1 0 0 0 0 1 0 0
223,5 0 1 0 1 0 0 1 0 0
224 0 1 0 1 0 0 1 0 0
224,5 1 0 0 1 0 0 1 0 0
225 1 0 0 1 0 0 1 0 0
225,5 0 0 0 1 1 1 0 1 1
226 0 0 0 1 1 1 0 1 1
226,5 0 1 1 1 0 0 1 0 1
227 0 1 1 1 0 0 1 0 1
227,5 0 1 0 1 0 0 1 0 0
228 0 1 0 1 0 0 1 0 0
228,5 1 0 0 0 1 0 1 1 0
229 1 0 0 0 1 0 1 1 0
229,5 0 0 1 1 0 0 1 0 0
230 0 0 1 1 0 0 1 0 0
230,5 0 1 0 1 0 0 0 0 1
231 0 1 0 1 0 0 0 0 1
231,5 0 1 0 1 0 0 1 0 1
232 0 1 0 1 0 0 1 0 1
232,5 1 0 0 1 0 1 1 0 0
233 1 0 0 1 0 1 1 0 0
233,5 0 0 0 1 0 0 1 1 0
234 0 0 0 1 0 0 1 1 0
234,5 0 1 0 0 1 0 1 0 0
235 0 1 0 0 1 0 1 0 0
235,5 0 1 1 1 0 0 0 0 0
236 0 1 1 1 0 0 0 0 0
236,5 1 0 0 1 0 0 1 0 0
237 1 0 0 1 0 0 1 0 0
237,5 0 0 0 1 1 0 1 0 0
238 0 0 0 1 1 0 1 0 0
238,5 0 1 1 1 0 0 1 0 0
239 0 1 1 1 0 0 1 0 0
239,5 0 1 0 1 0 0 1 0 0
240 0 1 0 1 0 0 1 0 0
240,5 1 0 0 0 0 1 0 1 1
241 1 0 0 0 0 1 0 1 1
241,5 0 0 0 1 0 0 1 0 1
242 0 0 0 1 0 0 1 0 1
242,5 0 1 0 1 0 0 1 0 0
243 0 1 0 1 0 0 1 0 0
243,5 0 1 0 1 1 0 1 1 0
244 0 1 0 1 1 0 1 1 0
244,5 1 0 1 1 0 0 1 0 0
245 1 0 1 1 0 0 1 0 0
245,5 0 0 0 1 0 0 0 0 1
246 0 0 0 1 0 0 0 0 1
246,5 0 1 0 0 1 0 1 0 1
247 0 1 0 0 1 0 1 0 1
247,5 0 1 1 1 0 1 1 0 0
248 0 1 1 1 0 1 1 0 0
248,5 1 0 0 1 0 0 1 1 0
249 1 0 0 1 0 0 1 1 0
249,5 0 0 0 1 0 0 1 0 0
250 0 0 0 1 0 0 1 0 0
250,5 0 1 0 1 0 0 0 0 0
251 0 1 0 1 0 0 0 0 0
251,5 0 1 0 1 0 0 1 0 0
252 0 1 0 1 0 0 1 0 0
252,5 1 0 0 0 1 0 1 0 0
253 1 0 0 0 1 0 1 0 0
253,5 0 0 1 1 0 0 1 0 0
254 0 0 1 1 0 0 1 0 0
254,5 0 1 0 1 0 0 1 0 0
255 0 1 0 1 0 0 1 0 0
255,5 0 1 0 1 1 1 0 1 1
256 0 1 0 1 1 1 0 1 1
256,5 1 0 1 1 0 0 1 0 1
257 1 0 1 1 0 0 1 0 1
257,5 0 0 0 1 0 0 1 0 0
258 0 0 0 1 0 0 1 0 0
258,5 0 1 0 0 0 0 1 1 0
259 0 1 0 0 0 0 1 1 0
259,5 0 1 0 1 0 0 1 0 0
260 0 1 0 1 0 0 1 0 0
260,5 1 0 0 1 0 0 0 0 1
261 1 0 0 1 0 0 0 0 1
261,5 0 0 0 1 1 0 1 0 1
262 0 0 0 1 1 0 1 0 1
262,5 0 1 1 1 0 1 1 0 0
263 0 1 1 1 0 1 1 0 0
263,5 0 1 0 1 0 0 1 1 0
264 0 1 0 1 0 0 1 1 0
264,5 1 0 0 0 1 0 1 0 0
265 1 0 0 0 1 0 1 0 0
265,5 0 0 1 1 0 0 0 0 0
266 0 0 1 1 0 0 0 0 0
266,5 0 1 0 1 0 0 1 0 0
267 0 1 0 1 0 0 1 0 0
267,5 0 1 0 1 0 0 1 0 0
268 0 1 0 1 0 0 1 0 0
268,5 1 0 0 1 0 0 1 0 0
269 1 0 0 1 0 0 1 0 0
269,5 0 0 0 1 0 0 1 0 0
270 0 0 0 1 0 0 1 0 0
270,5 0 1 0 0 1 1 0 1 1
271 0 1 0 0 1 1 0 1 1
271,5 0 1 1 1 0 0 1 0 1
272 0 1 1 1 0 0 1 0 1
272,5 1 0 0 1 0 0 1 0 0
273 1 0 0 1 0 0 1 0 0
273,5 0 0 0 1 1 0 1 1 0
274 0 0 0 1 1 0 1 1 0
274,5 0 1 1 1 0 0 1 0 0
275 0 1 1 1 0 0 1 0 0
275,5 0 1 0 1 0 0 0 0 1
276 0 1 0 1 0 0 0 0 1
276,5 1 0 0 0 0 0 1 0 1
277 1 0 0 0 0 0 1 0 1
277,5 0 0 0 1 0 1 1 0 0
278 0 0 0 1 0 1 1 0 0
278,5 0 1 0 1 0 0 1 1 0
279 0 1 0 1 0 0 1 1 0
279,5 0 1 0 1 1 0 1 0 0
280 0 1 0 1 1 0 1 0 0
280,5 1 0 1 1 0 0 0 0 0
281 1 0 1 1 0 0 0 0 0
281,5 0 0 0 1 0 0 1 0 0
282 0 0 0 1 0 0 1 0 0
282,5 0 1 0 0 1 0 1 0 0
283 0 1 0 0 1 0 1 0 0
283,5 0 1 1 1 0 0 1 0 0
284 0 1 1 1 0 0 1 0 0
284,5 1 0 0 1 0 0 1 0 0
285 1 0 0 1 0 0 1 0 0
285,5 0 0 0 1 0 1 0 1 1
286 0 0 0 1 0 1 0 1 1
286,5 0 1 0 1 0 0 1 0 1
287 0 1 0 1 0 0 1 0 1
287,5 0 1 0 1 0 0 1 0 0
288 0 1 0 1 0 0 1 0 0
288,5 1 0 0 0 1 0 1 1 0
289 1 0 0 0 1 0 1 1 0
289,5 0 0 1 1 0 0 1 0 0
290 0 0 1 1 0 0 1 0 0
290,5 0 1 0 1 0 0 0 0 1
291 0 1 0 1 0 0 0 0 1
291,5 0 1 0 1 1 0 1 0 1
292 0 1 0 1 1 0 1 0 1
292,5 1 0 1 1 0 1 1 0 0
293 1 0 1 1 0 1 1 0 0
293,5 0 0 0 1 0 0 1 1 0
294 0 0 0 1 0 0 1 1 0
294,5 0 1 0 0 0 0 1 0 0
295 0 1 0 0 0 0 1 0 0
295,5 0 1 0 1 0 0 0 0 0
296 0 1 0 1 0 0 0 0 0
296,5 1 0 0 1 0 0 1 0 0
297 1 0 0 1 0 0 1 0 0
297,5 0 0 0 1 1 0 1 0 0
298 0 0 0 1 1 0 1 0 0
298,5 0 1 1 1 0 0 1 0 0
299 0 1 1 1 0 0 1 0 0
299,5 0 1 0 1 0 0 1 0 0
300 0 1 0 1 0 0 1 0 0
300,5 1 0 0 0 1 1 0 1 1
301 1 0 0 0 1 1 0 1 1
301,5 0 0 1 1 0 0 1 0 1
302 0 0 1 1 0 0 1 0 1
302,5 0 1 0 1 0 0 1 0 0
303 0 1 0 1 0 0 1 0 0
303,5 0 1 0 1 0 0 1 1 0
304 0 1 0 1 0 0 1 1 0
304,5 1 0 0 1 0 0 1 0 0
305 1 0 0 1 0 0 1 0 0
305,5 0 0 0 1 0 0 0 0 1
306 0 0 0 1 0 0 0 0 1
306,5 0 1 0 0 1 0 1 0 1
307 0 1 0 0 1 0 1 0 1
307,5 0 1 1 1 0 1 1 0 0
308 0 1 1 1 0 1 1 0 0
308,5 1 0 0 1 0 0 1 1 0
309 1 0 0 1 0 0 1 1 0
309,5 0 0 0 1 1 0 1 0 0
310 0 0 0 1 1 0 1 0 0
310,5 0 1 1 1 0 0 0 0 0
311 0 1 1 1 0 0 0 0 0
311,5 0 1 0 1 0 0 1 0 0
312 0 1 0 1 0 0 1 0 0
312,5 1 0 0 0 0 0 1 0 0
313 1 0 0 0 0 0 1 0 0
313,5 0 0 0 1 0 0 1 0 0
314 0 0 0 1 0 0 1 0 0
314,5 0 1 0 1 0 0 1 0 0
315 0 1 0 1 0 0 1 0 0
315,5 0 1 0 1 1 1 0 1 1
316 0 1 0 1 1 1 0 1 1
316,5 1 0 1 1 0 0 1 0 1
317 1 0 1 1 0 0 1 0 1
317,5 0 0 0 1 0 0 1 0 0
318 0 0 0 1 0 0 1 0 0
318,5 0 1 0 0 1 0 1 1 0
319 0 1 0 0 1 0 1 1 0
319,5 0 1 1 1 0 0 1 0 0
320 0 1 1 1 0 0 1 0 0
320,5 1 0 0 1 0 0 0 0 1
321 1 0 0 1 0 0 0 0 1
321,5 0 0 0 1 0 0 1 0 1
322 0 0 0 1 0 0 1 0 1
322,5 0 1 0 1 0 1 1 0 0
323 0 1 0 1 0 1 1 0 0
323,5 0 1 0 1 0 0 1 1 0
324 0 1 0 1 0 0 1 1 0
324,5 1 0 0 0 1 0 1 0 0
325 1 0 0 0 1 0 1 0 0
325,5 0 0 1 1 0 0 0 0 0
326 0 0 1 1 0 0 0 0 0
326,5 0 1 0 1 0 0 1 0 0
327 0 1 0 1 0 0 1 0 0
327,5 0 1 0 1 1 0 1 0 0
328 0 1 0 1 1 0 1 0 0
328,5 1 0 1 1 0 0 1 0 0
329 1 0 1 1 0 0 1 0 0
329,5 0 0 0 1 0 0 1 0 0
330 0 0 0 1 0 0 1 0 0
330,5 0 1 0 0 0 1 0 1 1
331 0 1 0 0 0 1 0 1 1
331,5 0 1 0 1 0 0 1 0 1
332 0 1 0 1 0 0 1 0 1
332,5 1 0 0 1 0 0 1 0 0
333 1 0 0 1 0 0 1 0 0
333,5 0 0 0 1 1 0 1 1 0
334 0 0 0 1 1 0 1 1 0
334,5 0 1 1 1 0 0 1 0 0
335 0 1 1 1 0 0 1 0 0
335,5 0 1 0 1 0 0 0 0 1
336 0 1 0 1 0 0 0 0 1
336,5 1 0 0 0 1 0 1 0 1
337 1 0 0 0 1 0 1 0 1
337,5 0 0 1 1 0 1 1 0 0
338 0 0 1 1 0 1 1 0 0
338,5 0 1 0 1 0 0 1 1 0
339 0 1 0 1 0 0 1 1 0
339,5 0 1 0 1 0 0 1 0 0
340 0 1 0 1 0 0 1 0 0
340,5 1 0 0 1 0 0 0 0 0
341 1 0 0 1 0 0 0 0 0
341,5 0 0 0 1 0 0 1 0 0
342 0 0 0 1 0 0 1 0 0
342,5 0 1 0 0 1 0 1 0 0
343 0 1 0 0 1 0 1 0 0
343,5 0 1 1 1 0 0 1 0 0
344 0 1 1 1 0 0 1 0 0
344,5 1 0 0 1 0 0 1 0 0
345 1 0 0 1 0 0 1 0 0
345,5 0 0 0 1 1 1 0 1 1
346 0 0 0 1 1 1 0 1 1
346,5 0 1 1 1 0 0 1 0 1
347 0 1 1 1 0 0 1 0 1
347,5 0 1 0 1 0 0 1 0 0
348 0 1 0 1 0 0 1 0 0
348,5 1 0 0 0 0 0 1 1 0
349 1 0 0 0 0 0 1 1 0
349,5 0 0 0 1 0 0 1 0 0
350 0 0 0 1 0 0 1 0 0
350,5 0 1 0 1 0 0 0 0 1
351 0 1 0 1 0 0 0 0 1
351,5 0 1 0 1 1 0 1 0 1
352 0 1 0 1 1 0 1 0 1
352,5 1 0 1 1 0 1 1 0 0
353 1 0 1 1 0 1 1 0 0
353,5 0 0 0 1 0 0 1 1 0
354 0 0 0 1 0 0 1 1 0
354,5 0 1 0 0 1 0 1 0 0
355 0 1 0 0 1 0 1 0 0
355,5 0 1 1 1 0 0 0 0 0
356 0 1 1 1 0 0 0 0 0
356,5 1 0 0 1 0 0 1 0 0
357 1 0 0 1 0 0 1 0 0
357,5 0 0 0 1 0 0 1 0 0
358 0 0 0 1 0 0 1 0 0
358,5 0 1 0 1 0 0 1 0 0
359 0 1 0 1 0 0 1 0 0
359,5 0 1 0 1 0 0 1 0 0
360 0 1 0 1 0 0 1 0 0

mollyman
02.11.2008, 19:02
Zu hoch für einen Controller? LOL!
Ich wette mit dir dass du/man das mit einem Tiny13 schaffst. MIt Assembler kann man es selbst mit dem Tiny11 machen.

zu hoch für mich sagte ich , weil ich in dem Thema halt blutigster anfänger bin, das man das machen kann, mag sicher stimmen, ob ich werden wir sehen

Dirk
02.11.2008, 21:10
Hallo mollyman,

jetzt, wo du die Tabelle mit den Schaltzuständen aller 9 Ausgänge hast, kannst du ja die Data-Zeilen schreiben:
Schalttabelle:
Data &B10110001, 1 'Daten 0,5s
Data &B10110001, 1 'Daten 1 s
usw.

Dabei habe ich nur die Bits für Portc in die richtige Reihenfolge (c-7 ... c-0) gebracht und das b-0 Bit als "1" (oder "0", wenn b-0 aus ist) angehängt (de fakto wird das ein 2. Byte, man braucht also 720 Bytes gesamt).

Man kann jetzt in einer Schleife alle 360 Positionen einlesen und die Ports schalten:
Read Portc_position
Portc = Portc_position
Read Portb_position
Portb = Portb_position

Für Portb geht das so einfach nur, wenn die anderen Portpins (PB1..7) nicht für anderes verwendet werden.

Gruß Dirk

for_ro
03.11.2008, 00:23
Hi,
deine Abfolge wiederholt sich so regelmäßig, dass ich das Problem in Code umsetzen würde:


$regfile "m8def.dat"
$crystal = 1000000
Config Portc = Output
Dim Bit0 As Byte , Bit1 As Byte , Bit2 As Byte
Dim Bit3 As Byte , Bit4 As Byte , Bit5 As Byte
Dim Bit6 As Byte , Bit7 As Byte , Bit8 As Byte
Dim Bit0_max As Byte , Bit1_max As Byte , Bit2_max As Byte
Dim Bit3_max As Byte , Bit4_max As Byte , Bit5_max As Byte
Dim Bit6_max As Byte , Bit7_max As Byte , Bit8_max As Byte
Dim Bit0_array(8) As Byte , Bit1_array(8) As Byte , Bit2_array(18) As Byte
Dim Bit3_array(12) As Byte , Bit4_array(18) As Byte , Bit5_array(30) As Byte
Dim Bit6_array(10) As Byte , Bit7_array(30) As Byte , Bit8_array(30) As Byte
Dim Port_c As Byte
Dim Change_state As Byte
Dim Timer0_ovfl As Byte
Dim Cycle As Byte
Config Timer0 = Timer , Prescale = 1024
On Timer0 Timer0_isr
Timer0_startwert Alias 8 '1.000.000/1024/(256-8=244)/2 ~ 1 x pro Sekunde, entspricht waitms 1000
Timer0 = Timer0_startwert
Enable Timer0
Enable Interrupts
Portc = &B01010101
Change_state = Portc
Change_state = Change_state And &HF0
Bit0_array(1) = 1
Bit0_array(2) = 1
Bit1_array(5) = 1
Bit1_array(6) = 1
Bit1_array(7) = 1
Bit1_array(8) = 1
Bit2_array(3) = 1
Bit2_array(4) = 1
Bit2_array(9) = 1
Bit2_array(10) = 1
Bit3_array(3) = 1
Bit3_array(4) = 1
Bit3_array(5) = 1
Bit3_array(6) = 1
Bit3_array(7) = 1
Bit3_array(8) = 1
Bit3_array(9) = 1
Bit3_array(10) = 1
Bit3_array(11) = 1
Bit3_array(12) = 1
Bit4_array(1) = 1
Bit4_array(2) = 1
Bit4_array(7) = 1
Bit4_array(8) = 1
Bit5_array(1) = 1
Bit5_array(2) = 1
Bit5_array(15) = 1
Bit5_array(16) = 1
Bit6_array(3) = 1
Bit6_array(4) = 1
Bit6_array(5) = 1
Bit6_array(6) = 1
Bit6_array(7) = 1
Bit6_array(8) = 1
Bit6_array(9) = 1
Bit6_array(10) = 1
Bit7_array(1) = 1
Bit7_array(2) = 1
Bit7_array(7) = 1
Bit7_array(8) = 1
Bit7_array(17) = 1
Bit7_array(18) = 1
Bit8_array(1) = 1
Bit8_array(2) = 1
Bit8_array(3) = 1
Bit8_array(4) = 1
Bit8_array(11) = 1
Bit8_array(12) = 1
Bit8_array(13) = 1
Bit8_array(14) = 1

Bit0_max = 8
Bit1_max = 8
Bit2_max = 18
Bit3_max = 12
Bit4_max = 18
Bit5_max = 30
Bit6_max = 10
Bit7_max = 30
Bit8_max = 30

Do
If Change_state = 1 Then
Incr Cycle
Incr Bit0
If Bit0 > Bit0_max Then Bit0 = 1
Port_c.0 = Bit0_array(bit0)
Incr Bit1
If Bit1 > Bit1_max Then Bit1 = 1
Port_c.1 = Bit1_array(bit1)
Incr Bit2
If Bit2 > Bit2_max Then Bit2 = 1
Port_c.2 = Bit2_array(bit2)
Incr Bit3
If Bit3 > Bit3_max Then Bit3 = 1
Port_c.3 = Bit3_array(bit3)
Incr Bit4
If Bit4 > Bit4_max Then Bit4 = 1
Port_c.4 = Bit4_array(bit4)
Incr Bit5
If Bit5 > Bit5_max Then Bit5 = 1
Port_c.5 = Bit5_array(bit5)
Incr Bit6
If Bit6 > Bit6_max Then Bit6 = 1
Port_c.6 = Bit6_array(bit6)
Incr Bit7
If Bit7 > Bit7_max Then Bit7 = 1
Port_c.7 = Bit7_array(bit7)
Incr Bit8
If Bit8 > Bit8_max Then Bit8 = 1
'Print Cycle ; " " ; Bin(port_c) ; Bit8_array(bit8)
Portb.0 = Bit8_array(bit8)
Portc = Port_c
Change_state = 0
End If
Loop

End

Timer0_isr:
Timer0 = Timer0_startwert
Incr Timer0_ovfl
If Timer0_ovfl = 2 Then
Timer0_ovfl = 0
Change_state = 1
End If
Return

Braucht nur 14% vom Mega8.

Der Timer0 sorgt dafür, dass alle 0,5 sec ein Wechsel stattfindet. Du kannst aleso in der Do-Schleife noch andere Sachen machen, die den Takt nicht stören werden.
In deinem Code hast du Waitms = 1000 geschrieben, aber sonst immer nach 0,5 sec einen Wechsel gefordert. Wenn du doch 1000 brauchst, musst du die 2 in der ISR auf 4 setzen.

Ich bin mir auch nicht sicher, ob ich die richtige Reihe für PortB.0 genommen habe. Auch nicht, ob PortC richtig herum ist. Evtl. musst du die dann noch tauschen.

Gruß

Rolf

mollyman
03.11.2008, 08:17
erstmal vielen Dank für Eure Mühe.

Jetzt ist es so, dass ich das Programm direkt übernehmen könnte, aber ich möchte es auch verstehen um daraus zu lernen
Im ersten Block hast du die Variablen Definiert, dass Sie werte zwischen 0 und 255 haben , ok das ist mir klar
Danach hast du den Internen Timer 0 konfiguriert. ok ist auch klar.
Dann hast du pro Bit definiert bei welchem Takt der Port auf 1 gesetzt ist und im nächsten Teil wie viele Takte es pro Ausgang gibt wobei mir beim Bitarry die Bedeutung der Klammer nicht klar ist

Im nächsten Teil wird das es dann ganz schwierig für mich. Es beginnt die Schleife und dann kommt die If Abfrage für das Changestate, das weiter unten gebildet wird. Den Incr Bit0 sagt mir gar nichts
wenn du mir den teil
" Incr Bit0
If Bit0 > Bit0_max Then Bit0 = 1
Port_c.0 = Bit0_array(bit0) "
noch erklären könntest wäre es klasse.

Wobei die Bildung des Changssteate mit dem Timer_ISr mir etwas unklar ist genau wie die Bildung des Bit0

Gruß Martin

for_ro
03.11.2008, 13:21
Die Sache ist halt so gedacht:

Jede LED und damit jedes Bit an PortC hat seine eigene Regelmäßigkeit.
Bit2 z.B. so
2 x aus
2 x an
4 x aus
2 x an
8 x aus
Danach geht es wieder von vorne los. Dies sind 18 Zustände. Bit2_max wird daher auf 18 gesetzt. Im Bit2_array ist diese Sequenz abgelegt. Bit2 ist der Zeiger auf die aktuelle Position in diesem Array.
Zur Bestimmung des nächsten Zustands wird folgendes gemacht:
Incr Bit2 setzt den Zeiger auf die nächste Position
If Bit2 > Bit2_max Then Bit2 = 1 Falls der Zeiger über das letzte Element hinaus geht, fängt er wieder von vorne an, also bei 1.
Port_c.2 = Bit2_array(Bit2) setzt die Hilfsvariable für den PortC Bit 2 auf den Status, also da, was im Array an der Zeigerposition steht, 0 oder 1. Damit die LEDs nicht nacheinander angehen, habe ich Hilfsvariable benutzt.

Der Timer ermöglicht dir, die Waitms zu vermeiden. Wenn du noch irgendetwas anderes in deinem Programm machen möchtest, geht dies nun. Change_state wird also jede halbe Sekunde vom Timer auf 1 gesetzt. Im Mainloop wird auf 1 geprüft, dann auf 0 zurückgesetzt (damit er dies nicht direkt noch mal macht) und dann der neue Zustand der Bits berechnet.

Was meinst du mit:


wobei mir beim Bitarry die Bedeutung der Klammer nicht klar ist

mollyman
03.11.2008, 20:45
gemeint ist folgendes oben steht
Bit6_array(10)
weiter unten
Bit6_array(bit6)
wobei der oberere Wert oben als Byte definiert ist. der untere ist nicht definiert.

Wenn ich aber deine Erklärung richtig verstanden habe ist es die Hilfsvariabele die dann dann in der Variabelen Port_C zu der Variabelen wird, die dann den Ausgabewert für Portc erzeugt

for_ro
03.11.2008, 21:14
Du weißt scheinbar nicht, was ein Array ist.
Ein Array ist eine Folge von gleichartigen (gleicher Typ) von Werten, die alle unter einem Namen, hier bit6_array angesprochen werden können. Mit
Dim Bit6_array(10) as Byte
sagst du dem Compiler, er soll 10 Variablen vom Typ Byte anlegen, die alle hintereinander im Speicher stehen. Diese kannst du nun einzeln mit Bit6_array(1), Bit6_array(2) usw. ansprechen.
Hat die Variable Bit6 den Wert 5, so gibt dir Bit6_array(Bit6) den 5. Wert zurück. Das wäre also gleichbedeutend mit Bit6_array(5), was in unserem Fall den Wert 1 hat.

Klar geworden?

Gruß

Rolf

mollyman
04.11.2008, 08:54
:idea: ok jetzt habe ich es verstanden

und du hast recht gehabt so ganz genau wusste ich nicht was ein array ist.

Danke nochmal für deine Mühe sowohl für das Programm als auch für die Erläuterungen dazu

mollyman
06.11.2008, 23:04
ich habe das programm mal eine Simulation laufen lassen.

leider funktioniert es nicht. er hängt in der Do-Loop schleife fest und zählt den timer nicht hoch.

for_ro
06.11.2008, 23:36
ich habe das programm mal eine Simulation laufen lassen.
Meinst du damit, dass du es im Simulator laufen gelassen hast?
Ohne Änderung am Timer dauert es im Simulator bestimmt eine Minute bis der Timer das erste mal zuschlägt.
Setze mal den Prescale auf 1, dann kommen die Interrupts schneller.
Auf echter Hardware kann ich das Programm nicht ausprobieren, weil ich den µC nicht habe.

Ich hatte auch in der Spalte C-5 übersehen, dass es immer zwischen 12 und 14 aus Phasen wechselt. Das habe ich jetzt oben im Code korrigiert!!!

Gruß

Rolf

mollyman
07.11.2008, 06:01
ok das war es jetzt funzt es

mollyman
26.11.2008, 06:56
ich wollte mich nochmal für die Hilfe bedanken, die Schaltung ist aufgebaut und funktioniert wunderbar.

dank der tollen Erklärungen konnte ich auch kleine Fehler im Code beheben so das die Takte sauber funktionieren