Herzlich Willkommen im einzigen (deutschsprachigem) Picaxe-Forum.

Der Ursprung dieses Forum reicht bis in das Jahr 2008 zurück


Nr. 6 lebt ...

#1 von Naubaddi , 03.01.2020 15:01

Geschafft, das Programm-Modul um einen Servo anzusteuern ist fertig, nur das was wirklich nötig ist um einen Servo präzise auf eine Position zu fahren. Egal was das Servo gerade macht es reagiert sofort und schnell auf einen neuen Tastendruck, erfreulich ist im Gegensatz zum PICAXE daß das Servo nicht anfängt zu Zappeln was ohne Ende genervt hat.

Die Utensilien wurden um ein paar Kabel mit Widerständen und Steckern für die Taster erweitert, Dinge die ich oft benutze möchte ich nicht jedes mal mit fliegenden Verbindungen anschließen. So entstand auch das kleine Platinchen für den RC-Anschluß, so kann ruck zuck vom Servo zum RC-Schaltmodul, Fahrtregler... gewechselt werden. Ich schreibe hier immer von kleinen RC-Dingen die nur wenige mA brauchen, wenn es mal mehr wird wird auch eine zweite Stromquelle benutzt ;-).

Bevor die Bilder kommen noch ein Hilferuf: "Naubaddi braucht Input!", und zwar eine Empfehlung für ein Display (alphanumerisch und Grafik). Dann kann es in die zweite Runde gehen, alles schon für "Nr. 6" lebt auch .

Die Servo-Taster Zusammenstellung:


Das Platinchen wird auf GND, VCC gesteckt und das Signalkabel auf einen Port


Das Programm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 
' Compiler: Bascom-Demo 2.0.7.5
 
' Dateiname: Servo mit Taster positionieren.axe
' Funktion: einen Servo mit Tastern auf definierte Positionen ansteuern
' links = 55, Mitte = 95, rechts = 135
' Datum: Start 02.01.2020, Stand 03.01.2020
' Von: Beispiel von BoomBoomMagic, geändert/angepaßt von Naubaddi
 
' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
 
$regfile = "m328pdef.dat"
$crystal = 8000000
$hwstack = 50
$swstack = 50
$framesize = 50
 
' &HFF, &H62, &HDF, &HFF ' 1MHz
$PROG &HFF, &HE2, &HD9, &HFF ' 8MHz
 
' --- Deklarationen... -----------------------------------------------------------------------------------------
 
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
config portb.0 = output ' Ausgang für das Servo-Signal
 
config portc.0 = output ' LED 1
config portc.2 = output ' LED 2
config portc.4 = output ' LED 3
 
config portc.1 = input ' Taster 1
config portc.3 = input ' Taster 2
config portc.5 = input ' Taster 3
 
Enable Interrupts ' Interrupt einschalten (für Servo 1)
 
' --- Variablen... ---------------------------------------------------------------------------------------------
 
LED_1 alias Portc.0
LED_2 alias Portc.2
LED_3 alias Portc.4
 
Taster_1 alias pinc.1
Taster_2 alias pinc.3
Taster_3 alias pinc.5
 
' --- Vorbelegung der Variablen... -----------------------------------------------------------------------------
 
LED_1 = 0
LED_2 = 0
LED_3 = 0
 
Servo(1) = 95 ' Mitte
 
' --- Programm Anfang ------------------------------------------------------------------------------------------
 
main:
 
if Taster_1 = 1 then
Servo(1) = 55 ' links
do : loop until Taster_1 = 0
endif
 
if Taster_2 = 1 then
Servo(1) = 95 ' Mitte
do : loop until Taster_2 = 0
endif
 
if Taster_3 = 1 then
Servo(1) = 135 ' rechts
do : loop until Taster_3 = 0
endif
 
goto main
 
' --- Programm Ende --------------------------------------------------------------------------------------------
 
end
 
' --- Prozeduren, Funktionen... --------------------------------------------------------------------------------
' --------------------------------------------------------------------------------------------------------------
 



Grüßle, Naubaddi


Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019

zuletzt bearbeitet 03.01.2020 | Top

RE: Nr. 6 lebt ...

#2 von Naubaddi , 03.01.2020 21:30

Nabend zusammen, das Projekt "Nr. 6 lebt" auch wird nicht in ein paar Tagen, Wochen... fertig sein, es wird doch etwas größer werden als es geplant war. Mit Größe ist die Größe von Nr. 6 und von der Elektrik gemeint, die Größe von Nr. 6 ergibt sich wie so oft aus der Größe der Bauteile. In diesem Fall sind es die Augen (32mmx32mm) und der Mund (32mm x 129mm), Ihr könnt ja mal schätzen wie groß Nr. 6 wird ;-). Vermutlich werden 2 AKKUs a 7,2V und ein paar A zum Einsatz kommen für die Mechanik und ein paar 2,4V oder 3,6V AKKUs für die Elektrik , alles NI-MH AKKUs weil ich damit die besten Erfahrungen gemacht habe.

Ja da habe ich mir etwas vorgenommen was nicht ganz in mein Schema (klein, kleiner...) passt, dafür gibt es mir die Möglichkeit mal etwas mehr als blinkende LEDs und Servos zu programmieren. Da sind dann noch die Ketten die doch etwas groß ausfallen, wenn ich nix passendes finde werden sie Glied für Glied gebastelt .

Mit AVR und programmieren geht es spätestens Mittwoch weiter, dann sollen die bestellten Sachen da sein. Alles was so für Nr. 6 programmiert wird wird einzeln lauffähig sein, so eine Art Module für Servo, LEDs, Display... und was sonst noch so kommt.

Ein Bild von einem Teil meines Kabelsortiments gibt es noch, wie man sehen kann habe ich BBMs Vorschlag mit dem Servo-Anschluß für eine externe Stromquelle geändert:


Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#3 von BoomBoomMagic , 03.01.2020 22:11

Das sieht doch schon ganz zuversichtlich aus ;-)
Bei der anstehenden Baugröße wirst sicher nicht viel mit diesen kleinen Servos ausrichten können.
Da ist des dann schon besser wenn die Servos eine eigene Spannungsversorgung haben.


Sicherlich ist die Kaufversion der Matrix etwas groß.
Es gibt ja Matrix Anzeigen die nicht größer als der Chip oder gar wesentlich kleiner sind.
Dann habe ich Getriebemotoren die lediglich 3cm dick sind und 5kg Zugkraft bei 20mA machen !!!!
Umdrehungen von 1 -100 U/min .
Ein einziger Atmega644 würde dafür völlig reichen.
Dann wäre das gesamte Model vll. nicht größer als niedliche 25cm.

Aber ....... ich denke das ist derzeit für dieses Forum noch "Science Fiction Musik "

Ich denke Dein Weg , das vll. mit 3 ...4...5... Chips zu machen und alles schön auf große autarke Module verteilen
ist für den Laien doch am Anfang weit besser.
Du mußt ja auch erst die neuen Bauteile kennen lernen, gelle ;-)

Es soll ja keine Doktorarbeit werden , sondern Dein hobbiemäßiger Bastelspaß ;-)

Ich bin gespannt wie es weiter gehen wird und sich Stück für Stück aufbaut


*** Die Picaxe muß nicht alles können , es reicht wenn sie sagt wo's lang geht ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


RE: Nr. 6 lebt ...

#4 von BoomBoomMagic , 05.01.2020 22:40

Was mich ja mal interessieren würde , wie willst Du ein Dutzend Schaltfunktionen per RC Fernbedienung übermitteln ?


*** Die Picaxe muß nicht alles können , es reicht wenn sie sagt wo's lang geht ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


RE: Nr. 6 lebt ...

#5 von Naubaddi , 06.01.2020 00:03

Hatte ich doch schon irgendwo geschrieben, Nr. 6 bekommt eine klitzekleine K.I., so etwas ähnliches wie bei Werners Kettenkessel da haben die 3 Kanäle nicht gereicht für alle gewünschten Funktionen. Bei Nr. 6 würde es etwa so aussehen das je nach Situation die Fernbedienung andere Funktionen übernimmt, ein paar Beispiele:

* Nr. 6 fährt durch die Gegend, 2 Kanäle für vorwärts/rückwärts und rechts/links, 2 Kanäle für (weiß ich noch nicht)
* Nr. 6 Steht, 4 Kanäle für die Arme weil fahren und Arme bewegen schaffe ich eh nicht
* Nr. 6 steht und nix wird gemacht, Nr. 6 macht selber irgendwas
* Nr. 6 fährt gerade los, 2 Kanäle für vorwärts/rückwärts und rechts/links und in den ersten Minuten macht er irgendwelche Handbewegungen selbständig
* usw. je nach Situation meiner Fernbedienungsaktivität werden ein paar Funktionen berechnet die Nr. 6 ohne mein zu tun abarbeitet

das funktioniert beim Kettenkessel prima, das Einschalten des Lüfters für den Kühler wird berechnet über die Laufzeit der Ketten, die Motorattrappe läuft an wenn ein Signal für eine Kette anliegt und die Ketten bewegen sich erst nach ca. 20 sec (der Motor muß ja erst rund laufen), stehen beide Ketten für Zeit x wird die Motorattrappe ausgeschaltet usw...

Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#6 von BoomBoomMagic , 06.01.2020 10:21

O-kay .... KI hattest zwar schon erwähnt , aber noch nicht so ausführlich wie jetzt , so das man sich da konkret etwas drunter vorstellen kann. ;-)


*** Die Picaxe muß nicht alles können , es reicht wenn sie sagt wo's lang geht ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


RE: Nr. 6 lebt ...

#7 von Naubaddi , 06.01.2020 11:17

Es gibt auch noch Plan B ;-), die Fernsteuerung hat ja 4 proportional Kanäle und ein 8 Funktionen Taster-Modul, daraus kann man auch ein 16 Tasten-Modul machen . Ist für mich nicht sinnvoll weil mit den 4 proportional Kanälen habe ich schon genug zu tun, das Tasten-Modul könnte man für Funktionen benutzen wenn Nr. 6 steht... Es ergibt sich im laufe der Zeit was Nr. 6 alles kann.

Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#8 von BoomBoomMagic , 06.01.2020 13:02

Dann wirds ja in den nächsten Monaten nichts Neues geben :-(
So ein mega Potential an Chip und nur Servo und Blinki Blinki ...


*** Die Picaxe muß nicht alles können , es reicht wenn sie sagt wo's lang geht ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


RE: Nr. 6 lebt ...

#9 von BoomBoomMagic , 06.01.2020 16:44

Im Prinzip kannste ja schon eine 100 oder 200 Kanal Fernbedienung selber bauen ;-)

Man kann das ja wie bei der Musik und MIDI auch hier anwenden.
Dort sagt man ja auch nur welche Note , An oder Aus.


Das heißt , du bräuchtest lediglich eine Funkverbindung , dort wird dann auch lediglich mitgeteilt wann was an oder wann was aus.

Überleg mal :
Wenn du Gas gibst , rödelst du ja nicht ständig am Gashebel !
Ab und an sagst dann rechts oder links ......

Du kannst die "Sendebefehle" selbst definieren und auch wie reagiert werden soll.


https://eckstein-shop.de/Wireless-RF-Tra..._xoCRlIQAvD_BwE


*** Die Picaxe muß nicht alles können , es reicht wenn sie sagt wo's lang geht ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019

zuletzt bearbeitet 06.01.2020 | Top

RE: Nr. 6 lebt ...

#10 von BoomBoomMagic , 12.01.2020 16:54

Ich hab mal eben nen bissel rumprobiert ........
also , ein Gesicht mit einem alphanumerischen Display ? ...... keine so gute Idee find ich.



Mit einem Grafikdisplay sicherlich noch etwas zu verfeinern möglich , aber .....
es kostet wesentlich mehr und überwiegend sind Flächen frei , bisken wie "mit Kanonen auf Tauben " schiessen.

Also so eine Matrix mit dem MAX7219 ist denn dann doch die beste Wahl.


***Lieber 2x mehr lesen , als 1x dumm fragen ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


RE: Nr. 6 lebt ...

#11 von Naubaddi , 12.01.2020 17:16

Nabend allerseits,

die Displays sind zum experimentieren gedacht, oder um zu lernen wie es geht.

Habe auch ein wenig mit dem 32x8 Matrix-Teil experimentiert, die Anordnung finde ich blöd weil um 90° gedreht die Daten erwartet werden. Es gibt schlimmeres, also ran ans Werk.

Es ist noch nix besonderes, es sind die ersten Gehversuche:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
 
' Compiler: Bascom-Demo 2.0.7.5
 
' Dateiname: Nr6 Mund mit 32x8 Matrix.avr
' Funktion: einen Mund für Nr. 6 mit einer 32x8 Matrix anzeigen und bewegen
' Datum: 12.01.2020, Stand 12.01.2020
' Von: Naubaddi
 
' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
 
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
 
' &HFF, &HE1, &HD9, &HFF ' 1MHz
$PROG &HFF, &HE4, &HD9, &HFF ' 8MHz
 
' --- Deklarationen... -----------------------------------------------------------------------------------------
 
Din alias portd.0
Cs alias portd.1
Clk alias portd.2
 
config Din = output
config Cs = output
config Clk = output
 
' --- Variablen... ---------------------------------------------------------------------------------------------
 
dim Befehl as byte ' Befehl für die 8x8 Matrix
dim Daten as byte ' Daten für die 8x8 Matrix
dim i as byte ' Zähler für for
dim Pause as word ' msec Pause zwischen den einzelnen Mundarten
 
' --- Vorbelegung der Variablen... -----------------------------------------------------------------------------
' --- Programm Anfang ------------------------------------------------------------------------------------------
 
Pause = 2000
Cs = 1
gosub Init_max ' initialisieren der 8x8 Matrix
 
do
 
gosub Mund_nix
for i = 0 to 7 ' lächeln
Cs = 0 ' noch nicht anzeigen
Befehl = i + 1 ' Zeilen Nr. der Matrix
 
Daten = lookup(i , Ml_4) ' 8x8 Matrix 4, die letzte Matrix
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Ml_3) ' 8x8 Matrix 3
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Ml_2) ' 8x8 Matrix 2
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Ml_1) ' 8x8 Matrix 1, die mit dem Anschluß zum Mikrocontroller
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Cs = 1 ' jetzt anzeigen
next i
waitms Pause
 
gosub Mund_nix
for i = 0 to 7 ' traurig
Cs = 0
Befehl = i + 1
 
Daten = lookup(i , Mt_4)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Mt_3)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Mt_2)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Mt_1)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Cs = 1
next i
waitms Pause
 
gosub Mund_nix
for i = 0 to 7 ' ooo
Cs = 0
Befehl = i + 1
 
Daten = lookup(i , Mo_4)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Mo_3)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Mo_2)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Mo_1)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Cs = 1
next i
waitms Pause
 
loop
 
' --- Programm Ende --------------------------------------------------------------------------------------------
 
end
 
' --- Prozeduren, Funktionen... --------------------------------------------------------------------------------
 
init_max: ' Initialisieren der 8x8 Matrix
Befehl = &H09 : Daten = &H00 ' 8x8 Matrix
gosub anzeigen
Befehl = &H0A : Daten = &H00 ' Helligkeit der Matrix von 0 = dunkel bis F = hell
gosub anzeigen
Befehl = &H0B : Daten = 7 ' 8x8 Matrix
gosub anzeigen
Befehl = &H0F : Daten = 0 ' Test aus
gosub anzeigen
Befehl = &H0C : Daten = 1 ' Shutdown aus
gosub anzeigen
return
 
anzeigen:
Cs = 0 ' noch nicht anzeigen
for i = 1 to 4 ' 4 8x8 Matrix sind angeschlossen
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
next i ' nächste Matrix
Cs = 1 ' jetzt anzeigen
return
 
Mund_nix:
for i = 0 to 7
Cs = 0
Befehl = i + 1
 
Daten = lookup(i , Mn_4)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Mn_3)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Mn_2)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup(i , Mn_1)
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Cs = 1
next i
waitms Pause
return
 
' --- data Reihen... -------------------------------------------------------------------------------------------
 
' --- nix ---
 
Mn_4:
data &B00000000 , &B00000000 , &B00000000 , &B01111111 , &B01111111 , &B00000000 , &B00000000 , &B00000000
Mn_3:
data &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000
Mn_2:
data &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000
Mn_1:
data &B00000000 , &B00000000 , &B00000000 , &B11111110 , &B11111110 , &B00000000 , &B00000000 , &B00000000
 
' --- lächeln ---
 
Ml_4:
data &B00000000 , &B01100000 , &B01110000 , &B00111100 , &B00001111 , &B00000011 , &B00000000 , &B00000000
Ml_3:
data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
Ml_2:
data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
Ml_1:
data &B00000000 , &B00000110 , &B00001110 , &B00111100 , &B11110000 , &B11000000 , &B00000000 , &B00000000
 
' --- traurig ---
 
Mt_4:
data &B00000000 , &B00000000 , &B00000011 , &B00001111 , &B00111100 , &B01110000 , &B01100000 , &B00000000
Mt_3:
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
Mt_2:
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
Mt_1:
data &B00000000 , &B00000000 , &B11000000 , &B11110000 , &B00111100 , &B00001110 , &B00000110 , &B00000000
 
' --- ooo ---
 
Mo_4:
data &B00000000 , &B00001111 , &B00011111 , &B00011000 , &B00011000 , &B00011111 , &B00001111 , &B00000000
Mo_3:
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
Mo_2:
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
Mo_1:
data &B00000000 , &B11110000 , &B11111000 , &B00011000 , &B00011000 , &B11111000 , &B11110000 , &B00000000
 
' --------------------------------------------------------------------------------------------------------------
 





Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#12 von BoomBoomMagic , 12.01.2020 17:21

Na das ist doch schon mal was

Hast zumindest verstanden wie des geht :-)


***Lieber 2x mehr lesen , als 1x dumm fragen ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


RE: Nr. 6 lebt ...

#13 von BoomBoomMagic , 12.01.2020 17:45

vielleicht schreibst als Kommentar für die initialisierung die wahre Bedeutung ??


init_max: ' Initialisieren der 8x8 Matrix
Befehl = &H0C : Daten = 0 ' Shutdown aus -------> Shutdown an , keine Ausführung möglich
gosub anzeigen
Befehl = &H09 : Daten = &H00 ' 8x8 Matrix -------> auf Matrixbetrieb schalten , nicht 7 Segment
gosub anzeigen
Befehl = &H0A : Daten = &H00 ' Helligkeit der Matrix von 0 = dunkel bis F = hell -------> 0-15 dezimal / $00 -$0F hexadezimal
gosub anzeigen
Befehl = &H0B : Daten = 7 ' 8x8 Matrix --------> wieviel Reihen sollen benutzt werden 0-7
gosub anzeigen
Befehl = &H0F : Daten = 0 ' Test aus
gosub anzeigen
Befehl = &H0C : Daten = 1 ' Shutdown aus -------> Shutdown aus , wieder Ausführung möglich
gosub anzeigen
return


***Lieber 2x mehr lesen , als 1x dumm fragen ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019

zuletzt bearbeitet 12.01.2020 | Top

RE: Nr. 6 lebt ...

#14 von Naubaddi , 12.01.2020 21:22

Kann ich machen, sind halt meine Kürzel für manche Dinge.
Wenn als Wert &H00 steht ist es für mich eine Hexadezimal und wenn es eine 0 ist eine Dezimal Zahl, das H ist für Hexadezimal, das B für Binär...

Würdest Du im Gegenzug Satzeichen direkt an den letzten Buchstaben setzen wie es üblich ist, vereinfacht das lesen ungemein und hat auch einen Grund bzw.einen Sinn "bei einem Zeilenumbruch wandert sonst das Satzzeichen an den Anfang der nächsten Zeile".

Im neuen Testprogramm habe ich es angepasst, Buchstaben von A-Z:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 
' Compiler: Bascom-Demo 2.0.7.5
 
' Dateiname: A-Z.avr
' Funktion: die Buchstaben A-Z mit einer 32x8 Matrix anzeigen
' Datum: 12.01.2020, Stand 12.01.2020
' Von: Naubaddi
 
' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
 
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
 
' &HFF, &HE1, &HD9, &HFF ' 1MHz
$PROG &HFF, &HE4, &HD9, &HFF ' 8MHz
 
' --- Deklarationen... -----------------------------------------------------------------------------------------
 
Din alias portd.0
Cs alias portd.1
Clk alias portd.2
 
config Din = output
config Cs = output
config Clk = output
 
' --- Variablen... ---------------------------------------------------------------------------------------------
 
dim Befehl as byte ' Befehl für die 8x8 Matrix
dim Daten as byte ' Daten für die 8x8 Matrix
dim Buchstabe as byte ' ein Buchstabe
dim z as byte ' Zähler für for, Buchstaben
dim i as byte ' Zähler für for, Matrix
dim Pause as word ' msec Pause zwischen den einzelnen Buchstaben
 
' --- Vorbelegung der Variablen... -----------------------------------------------------------------------------
' --- Programm Anfang ------------------------------------------------------------------------------------------
 
Pause = 500
Cs = 1
gosub Init_max
 
do
 
for z = 0 to 25
Buchstabe = z * 8
for i = 0 to 7
Cs = 0 ' noch nicht anzeigen
Befehl = i + 1 ' Zeilen Nr. der Matrix
 
Daten = lookup( Buchstabe , Buchstaben ) ' 8x8 Matrix 4, die letzte Matrix
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup( Buchstabe , Buchstaben ) ' 8x8 Matrix 3
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup( Buchstabe , Buchstaben ) ' 8x8 Matrix 2
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Daten = lookup( Buchstabe , Buchstaben ) ' 8x8 Matrix 1, die mit dem Anschluß zum Mikrocontroller
shiftout Din , Clk , Befehl , 1
shiftout Din , Clk , Daten , 1
 
Cs = 1 ' jetzt anzeigen
Incr Buchstabe
next i
waitms Pause
next z
 
loop
 
' --- Programm Ende --------------------------------------------------------------------------------------------
 
end
 
' --- Prozeduren, Funktionen... --------------------------------------------------------------------------------
 
Init_max:
Befehl = &H0C : Daten = 0 ' Shutdown an, keine Ausführung möglich
Befehl = &H09 : Daten = 0 ' auf Matrixbetrieb schalten, nicht auf 7 Segmentbetrieb
gosub anzeigen
Befehl = &H0A : Daten = 0 ' Helligkeit 0-15
gosub anzeigen
Befehl = &H0B : Daten = 7 ' wieviel Reihen sollen benutzt werden 0-7
gosub anzeigen
Befehl = &H0F : Daten = 0 ' Test aus
gosub anzeigen
Befehl = &H0C : Daten = 1 ' Shutdown aus, eine Ausführung ist wieder möglich
gosub anzeigen
return
 
anzeigen:
Cs = 0 ' noch nicht anzeigen
for i = 1 to 4 ' 4 8x8 Matrix sind angeschlossen
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
next i ' nächste Matrix
Cs = 1 ' jetzt anzeigen
return
 
' --- data Reihen... -------------------------------------------------------------------------------------------
 
Buchstaben:
 
' A z= 0
data &B00111000 , &B01000100 , &B01000100 , &B01111100 , &B01000100 , &B01000100 , &B01000100 , &B00000000
' B z= 1
data &B01111000 , &B01000100 , &B01000100 , &B01111000 , &B01000100 , &B01000100 , &B01111000 , &B00000000
' C z= 2
data &B00111000 , &B01000100 , &B01000000 , &B01000000 , &B01000000 , &B01000100 , &B00111000 , &B00000000
' D z= 3
data &B01111000 , &B01000100 , &B01000100 , &B01000100 , &B01000100 , &B01000100 , &B01111000 , &B00000000
' E z= 4
data &B01111100 , &B01000000 , &B01000000 , &B01111000 , &B01000000 , &B01000000 , &B01111100 , &B00000000
' F z= 5
data &B01111100 , &B01000000 , &B01000000 , &B01111000 , &B01000000 , &B01000000 , &B01000000 , &B00000000
' G z= 6
data &B00111000 , &B01000100 , &B01000000 , &B01001100 , &B01000100 , &B01000100 , &B00111000 , &B00000000
' H z= 7
data &B01000100 , &B01000100 , &B01000100 , &B01111100 , &B01000100 , &B01000100 , &B01000100 , &B00000000
' I z= 8
data &B00111000 , &B00010000 , &B00010000 , &B00010000 , &B00010000 , &B00010000 , &B00111000 , &B00000000
' J z= 9
data &B00011100 , &B00000100 , &B00000100 , &B00000100 , &B00000100 , &B01000100 , &B00111000 , &B00000000
' K z=10
data &B01000100 , &B01001000 , &B01010000 , &B01100000 , &B01010000 , &B01001000 , &B01000100 , &B00000000
' L z=11
data &B01000000 , &B01000000 , &B01000000 , &B01000000 , &B01000000 , &B01000000 , &B01111100 , &B00000000
' M z=12
data &B01000100 , &B01101100 , &B01111100 , &B01010100 , &B01000100 , &B01000100 , &B01000100 , &B00000000
' N z=13
data &B01000100 , &B01100100 , &B01100100 , &B01010100 , &B01001100 , &B01001100 , &B01000100 , &B00000000
' O z=14
data &B00111000 , &B01000100 , &B01000100 , &B01000100 , &B01000100 , &B01000100 , &B00111000 , &B00000000
' P z=15
data &B01111000 , &B01000100 , &B01000100 , &B01111000 , &B01000000 , &B01000000 , &B01000000 , &B00000000
' Q z=16
data &B00111000 , &B01000100 , &B01000100 , &B01000100 , &B01000100 , &B01001000 , &B00111100 , &B00000000
' R z=17
data &B01111000 , &B01000100 , &B01000100 , &B01111000 , &B01010000 , &B01001000 , &B01000100 , &B00000000
' S z=18
data &B00111100 , &B01000000 , &B01000000 , &B00111000 , &B00000100 , &B00000100 , &B01111000 , &B00000000
' T z=19
data &B01111100 , &B00010000 , &B00010000 , &B00010000 , &B00010000 , &B00010000 , &B00010000 , &B00000000
' U z=20
data &B01000100 , &B01000100 , &B01000100 , &B01000100 , &B01000100 , &B01000100 , &B00111000 , &B00000000
' V z=21
data &B01000100 , &B01000100 , &B00101000 , &B00101000 , &B00101000 , &B00010000 , &B00010000 , &B00000000
' W z=22
data &B01000100 , &B01000100 , &B01010100 , &B01010100 , &B01101100 , &B01101100 , &B01000100 , &B00000000
' X z=23
data &B01000100 , &B00101000 , &B00101000 , &B00010000 , &B00101000 , &B00101000 , &B01000100 , &B00000000
' Y z=24
data &B01000100 , &B01000100 , &B00101000 , &B00101000 , &B00010000 , &B00010000 , &B00010000 , &B00000000
' Z z=25
data &B01111100 , &B00000100 , &B00001000 , &B00010000 , &B00100000 , &B01000000 , &B01111100 , &B00000000
 
' --------------------------------------------------------------------------------------------------------------
 





Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#15 von BoomBoomMagic , 12.01.2020 22:05

ho ho ho .... jetzt nimmts aber einer genau

Kann ich gern tun mit den Satzzeichen insbesondere dem Apostroph.

Da ist wieder das schöne an Bascom , er erkennt das am Ende sofort und man kann einstellen wie weit weg das Apostroph vom letzten Buchstaben sein soll

Ich persönlich mag Hex-Zahlen nicht so gern , die lassen sich schlechter rechnen und erkennen als Dezimal oder binär.
Lediglich die Zahlen 0 - 9 sind im Hex identisch ausser dem ' $ ' davor.
Dem Compiler isset am Ende eh Banane w a s da steht , ob Hex , Binär , Dezimal , lediglich der Wert an sich muß passen


Dein Test mit dem Alphabet ist doch schon mal ganz schön geworden

Vor langer Zeit hatte ich auch mal eine Matrix mit Buchstaben machen müssen für jemanden.
Du glaubst nicht was das an Diskussionen hervor gebracht hat weil Fonts soo unterschiedlich sein können.
Am Ende haben wir uns auf eine 5x7 Matrix geeinigt


***Lieber 2x mehr lesen , als 1x dumm fragen ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019

zuletzt bearbeitet 12.01.2020 | Top

RE: Nr. 6 lebt ...

#16 von Naubaddi , 12.01.2020 22:21

Hast ja Recht mit meinen Kürzeln, es soll ja auch für Andere lesbar sein.
Vor langer langer Zeit konnte ich mit Hexadezimalzahlen fast so schnell arbeiten wie mit Dezimalzahlen, kurz die Hex im Kopf multipliziert, addiert und gut war. Das schöne an Hex ist, sie sind kurz und immer gleich lang.

Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#17 von BoomBoomMagic , 12.01.2020 22:42

Ich denke auch das sich das Hexadezimalsystem deshalb bewert hat , weil es nur 2 Ziffern hat $00 - $FF ( 0-255)
Das macht manch Arbeiten mit dem Mikrocontroller einfacher ... z.B. serielles senden .
Vieles ist in Datenblättern noch immer gern in Hex angegeben , ich mach mir dann doch die "Mühe" , es in
dezimal umzurechnen , denke der einfache User hats dann leichter mit dem Verständnis und erkennt manch
Zusammenhänge dann schneller.

Bestes Beispiel der RTC 1307
Read = $D1 (dezimal = 209 )
Write = $D0 (dezimal = 208 )

oder dem DS18B20

$CC = (dezimal = 204)
$44 = (dezimal = 68)
$BE = (dezimal = 190)


***Lieber 2x mehr lesen , als 1x dumm fragen ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


RE: Nr. 6 lebt ...

#18 von Naubaddi , 13.01.2020 23:35

Nabend zusammen, im Moment versuche ich ein wenig Leben in Nr. 6 zu bekommen.

Für den Anfang sollen Augen und Mund etwas auf Tastendruck machen, also zwei 8x8 Matrix-Module parallel auf Port D (1-3) für die Augen und vier 8x8 Matrix-Module auf Port D (4-6) für den Mund. Es funktioniert schon mit 2 verschiedenen Augenarten und 4 verschiedenen Mundarten . Mehr Datareihen für die Augen sind noch nicht fertig, das wird morgen erledigt.

Angenehme Nachtruhe!

Grüßle, Naubaddi


Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019

zuletzt bearbeitet 13.01.2020 | Top

RE: Nr. 6 lebt ...

#19 von BoomBoomMagic , 13.01.2020 23:43

wird sind gespannt ..... ;-)


***Lieber 2x mehr lesen , als 1x dumm fragen ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


RE: Nr. 6 lebt ...

#20 von Naubaddi , 14.01.2020 10:19

Morjen, das dauert dann doch etwas länger, der Compiler meinte gerade "die Demoversion schafft das nicht weil zu viel Programmcode" . Na gut dann wird der Code komprimiert, ist dann halt nicht mehr so schön übersichtlich. Es gibt dann eine Routine für den Mund mit einem Zeiger auf die Mundart im Datafeld, das ist dann eine Routine an Stelle von 5 Routinen. Das gleiche wird dann mit den Augen gemacht, und schon schrumpft der Code auf etwa die Hälfte.

Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#21 von Naubaddi , 14.01.2020 13:15

So, der Anfang ist gemacht und es funktioniert, die Übersicht ist für mich sogar besser geworden weil wesentlich weniger Zeilen .

Es wurde erst mal nur der Mund der mit Tastern bewegt wird auf weniger Zeilen reduziert, mal sehen ob da noch weniger geht ist ja fast wie zu Zeiten mit 8Bit Computern ohne Desktop .

So sieht das geschrumpfte Programm aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
 
' Compiler: Bascom-Demo 2.0.7.5
 
' Dateiname: Mund bewegen.avr
' Funktion: einen Mund für Nr. 6 mit Tastern bewegen, auf, zu, lach und traurig
' Datum: 12.01.2020, Stand 13.01.2020
' Von: Naubaddi
 
' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
 
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
 
' &HFF, &HE1, &HD9, &HFF ' 1MHz
$PROG &HFF, &HE4, &HD9, &HFF ' 8MHz
 
' --- Deklarationen... -----------------------------------------------------------------------------------------
 
Din alias portd.0 ' max Dateneingang
Cs alias portd.1 ' max Steuerung der Datenübernahme, anzeigen/nicht anzeigen
Clk alias portd.2 ' max Takteingang
 
Taster_1 alias pinc.1
Taster_2 alias pinc.2
Taster_3 alias pinc.3
Taster_4 alias pinc.4
 
config Din = output
config Cs = output
config Clk = output
 
config Taster_1 = input
config Taster_2 = input
config Taster_2 = input
config Taster_3 = input
 
' --- Variablen... ---------------------------------------------------------------------------------------------
 
dim Modul as byte ' Zähler für die Anzahl der angeschloßenen max-Module
dim Befehl as byte ' Befehl für den max
dim Daten as byte ' Daten für den max
dim Zeile as byte ' Zähler für die Zeilen der 8x8 Matrix
dim leeren as byte ' Zähler für leeren
 
dim M4 as word ' Position im Datafeld für max 4
dim M3 as word ' Position im Datafeld für max 3
dim M2 as word ' Position im Datafeld für max 2
dim M1 as word ' Position im Datafeld für max 1
 
' --- Vorbelegung der Variablen... -----------------------------------------------------------------------------
' --- Programm Anfang ------------------------------------------------------------------------------------------
 
gosub Init_max
gosub Matrix_leeren
 
waitms 1000
 
M4 = 0 : M3 = 8 : M2 = 16 : M1 = 24 ' Positionen für den Mund zu
goto Mund ' Mund zu anzeigen damit man weiß es kann losgehen ;-)
 
do
 
Taster:
if Taster_1 = 1 then : M4 = 0 : M3 = 8 : M2 = 16 : M1 = 24 : goto Mund : endif
if Taster_2 = 1 then : M4 = 32 : M3 = 40 : M2 = 48 : M1 = 56 : goto Mund : endif
if Taster_3 = 1 then : M4 = 64 : M3 = 72 : M2 = 80 : M1 = 88 : goto Mund : endif
if Taster_4 = 1 then : M4 = 96 : M3 = 104 : M2 = 112 : M1 = 120 : goto Mund : endif
 
loop
 
' --- Programm Ende --------------------------------------------------------------------------------------------
 
end
 
' --- Prozeduren, Funktionen... --------------------------------------------------------------------------------
 
Mund: ' einen Mund anzeigen
for Zeile = 1 to 8
Cs = 0 : Din = 0 : Clk = 0 ' noch nicht anzeigen
Befehl = Zeile ' Zeilen Nr. der Matrix
Daten = lookup( M4 , Mundarten ) ' 8x8 Matrix 4, die letzte 8x8 Matrix
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M3 , Mundarten ) ' 8x8 Matrix 3
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M2 , Mundarten ) ' 8x8 Matrix 2
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M1 , Mundarten ) ' 8x8 Matrix 1, die mit dem Anschluß zum Mikrocontroller
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
incr M4 : incr M3 : incr M2 : incr M1 ' die nächste Zeile vom Mund
Cs = 1 ' jetzt anzeigen
next Zeile
goto Taster
 
Init_max:
for Modul = 1 to 4 ' 4 8x8 Matrix-Module sind angeschlossen
Befehl = &H0C : Daten = 0 ' Shutdown an, keine Ausführung möglich
gosub Send_max
Befehl = &H09 : Daten = 0 ' auf Matrixbetrieb schalten, nicht auf 7 Segmentbetrieb
gosub Send_max
Befehl = &H0A : Daten = 0 ' Helligkeit 0-15
gosub Send_max
Befehl = &H0B : Daten = 7 ' wieviel Reihen sollen benutzt werden 0-7
gosub Send_max
Befehl = &H0F : Daten = 0 ' Test aus
gosub Send_max
Befehl = &H0C : Daten = 1 ' Shutdown aus, eine Ausführung ist wieder möglich
gosub Send_max
next Modul ' nächste Matrix
return
 
Matrix_leeren:
for Modul = 1 to 4 ' 4 8x8 Matrix-Module sind angeschlossen
For leeren = 1 To 8 ' die Zeile X (leeren) vom max
Befehl = leeren ' der Befehl für Zeile X (leeren) vom max
Daten = &B00000000 ' alle LEDs der 8x8 Matrix ausschalten
Gosub Send_max ' den Befehl und die Daten zum max senden
Next leeren ' nächste Zeile der Matrix
next Modul ' nächste Matrix
Return
 
Send_max: ' den Befehl und die Daten zur max senden
Cs = 0 : Din = 0 : Clk = 0 ' noch nicht anzeigen
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Cs = 1 ' jetzt anzeigen
Return
 
' --- data Reihen... -------------------------------------------------------------------------------------------
 
Mundarten:
' --- Mund zu ---
data &B00000000 , &B00000000 , &B00000000 , &B01111111 , &B01111111 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B11111110 , &B11111110 , &B00000000 , &B00000000 , &B00000000
' --- Mund auf ---
data &B00000000 , &B00001111 , &B00011111 , &B00011000 , &B00011000 , &B00011111 , &B00001111 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B11110000 , &B11111000 , &B00011000 , &B00011000 , &B11111000 , &B11110000 , &B00000000
' --- Mund lach ---
data &B00000000 , &B01100000 , &B01110000 , &B00111100 , &B00001111 , &B00000011 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B00000110 , &B00001110 , &B00111100 , &B11110000 , &B11000000 , &B00000000 , &B00000000
' --- Mund traurig ---
data &B00000000 , &B00000000 , &B00000011 , &B00001111 , &B00111100 , &B01110000 , &B01100000 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B11000000 , &B11110000 , &B00111100 , &B00001110 , &B00000110 , &B00000000
 
' --------------------------------------------------------------------------------------------------------------
 



Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#22 von Naubaddi , 14.01.2020 17:17

Mit dem geschrumpften Programm klappt es ganz gut, das Gesicht von Nr. 6 lebt schon ein wenig .
Wenn nichts gemacht wird öffnet Nr. 6 Augen und Mund (wenn er schläft) oder schließt Augen und Mund (wenn er wach ist), es ist erst mal ein Versuch wie gut und sicher das Programm arbeitet. Ansonsten kann man mit den 4 Tastern eine Gesichtszusammenstellung abrufen, dabei wird die Zeit wieder auf 0 gesetzt und der Zustand schlafen oder wach hinterlegt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
 
' Compiler: Bascom-Demo 2.0.7.5
 
' Dateiname: Augen bewegen.avr
' Funktion: die Augen für Nr. 6 mit Tastern bewegen
' Datum: 12.01.2020, Stand 13.01.2020
' Von: Naubaddi
 
' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
 
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
 
' &HFF, &HE1, &HD9, &HFF ' 1MHz
$PROG &HFF, &HE4, &HD9, &HFF ' 8MHz
 
' --- Deklarationen... -----------------------------------------------------------------------------------------
 
M_Din alias portd.0 ' max Dateneingang
M_Cs alias portd.1 ' max Steuerung der Datenübernahme, anzeigen/nicht anzeigen
M_Clk alias portd.2 ' max Takteingang
config M_Din = output
config M_Cs = output
config M_Clk = output
 
A_Din alias portd.3
A_Cs alias portd.4
A_Clk alias portd.5
config A_Din = output
config A_Cs = output
config A_Clk = output
 
Taster_1 alias pinc.1
Taster_2 alias pinc.2
Taster_3 alias pinc.3
Taster_4 alias pinc.4
config Taster_1 = input
config Taster_2 = input
config Taster_2 = input
config Taster_3 = input
 
' --- Variablen... ---------------------------------------------------------------------------------------------
 
dim Anzahl as byte ' Anzahl der angeschloßenen max-Module
dim Modul as byte ' Zähler für die Anzahl der angeschloßenen max-Module
dim Befehl as byte ' Befehl für den max
dim Daten as byte ' Daten für den max
dim Zeile as byte ' Zähler für die Zeilen der 8x8 Matrix
dim leeren as byte ' Zähler für leeren
dim M4 as byte ' Position im Datafeld für max 4 (Mund)
dim M3 as byte ' Position im Datafeld für max 3 (Mund)
dim M2 as byte ' Position im Datafeld für max 2 (Mund)
dim M1 as byte ' Position im Datafeld für max 1 (Mund)
dim A5 as byte ' Position im Datafeld für max 5 und 6 (Augen)
dim Zeit as word ' die vergangene Zeit ohne eine Aktion von mir
dim Nr6 as byte ' der Zustand von Nr. 6
 
' --- Vorbelegung der Variablen... -----------------------------------------------------------------------------
 
M4 = 0 ' Positionen für Mund zu
A5 = 0 ' Position für Augen zu
Zeit = 0 ' die Zeit fängt an zu laufen ;-)
Nr6 = 0 ' Nr. 6 schläft
 
' --- Programm Anfang ------------------------------------------------------------------------------------------
 
Anzahl = 1 ' 2 max-Module parallel für die Augen
gosub Init_max
gosub Matrix_leeren
Anzahl = 4 ' 4 max-Module in Reihe für den Mund
gosub Init_max
gosub Matrix_leeren
waitms 1000
goto Mund ' Mund und Augen zu, es kann jetzt losgehen ;-)
 
' --- A5 M4 Nr6
' --- 0 = Augen zu 0 = Mund zu 0 = schlafen
' --- 8 = Augen auf 32 = Mund auf 1 = wach
' --- 16 = Augen unten 64 = Mund lach 2 = langweilig
' --- 24 = Augen links unten 96 = Mund traurig 3 = sauer
' --- 32 = Augen links
' --- 40 = Augen links oben
' --- 48 = Augen oben
' --- 56 = Augen rechts oben
' --- 64 = Augen rechts
' --- 72 = Augen rechts unten
 
do
 
Taster:
if Taster_1 = 1 then : Zeit = 0 : Nr6 = 0 : A5 = 0 : M4 = 0 : goto Mund : endif ' Mund zu, Augen zu
if Taster_2 = 1 then : Zeit = 0 : Nr6 = 1 : A5 = 8 : M4 = 32 : goto Mund : endif ' Mund auf, Augen auf
if Taster_3 = 1 then : Zeit = 0 : Nr6 = 1 : A5 = 32 : M4 = 64 : goto Mund : endif ' Mund lach, Augen rechts
if Taster_4 = 1 then : Zeit = 0 : Nr6 = 1 : A5 = 64 : M4 = 96 : goto Mund : endif ' Mund sauer, Augen links
 
if Zeit > 2000 then ' seit 2 Sekunden gab es keine Aktion von mir
Zeit = 0
Select Case Nr6
Case 0 : if Nr6 = 0 then : Nr6 = 1 : M4 = 32 : A5 = 8 : endif ' Mund auf, Augen auf
Case 1 : if Nr6 = 1 then : Nr6 = 0 : M4 = 0 : A5 = 0 : endif ' Mund zu, Augen zu
End Select
goto Mund
endif
 
waitms 1
incr Zeit
 
loop
 
' --- Programm Ende --------------------------------------------------------------------------------------------
 
end
 
' --- Prozeduren, Funktionen... --------------------------------------------------------------------------------
 
Augen:
for Zeile = 1 to 8
A_Cs = 0 : A_Din = 0 : A_Clk = 0 ' noch nicht anzeigen
Befehl = Zeile
Daten = lookup( A5 , Augenarten ) ' 8x8 Matrix 1 und 2 sind paralel am Port D (3-5) angeschloßen
shiftout A_Din , A_Clk , Befehl , 1 ' den Befehl senden
shiftout A_Din , A_Clk , Daten , 1 ' die Daten senden
incr A5 ' die nächste Zeile vom Auge
A_Cs = 1 ' jetzt anzeigen
next Zeile
goto Taster
 
Mund:
M3 = M4 + 8 : M2 = M3 + 8 : M1 = M2 + 8
for Zeile = 1 to 8
M_Cs = 0 : M_Din = 0 : M_Clk = 0 ' noch nicht anzeigen
Befehl = Zeile
Daten = lookup( M4 , Mundarten ) ' 8x8 Matrix 4, die letzte 8x8 Matrix
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
Daten = lookup( M3 , Mundarten ) ' 8x8 Matrix 3
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
Daten = lookup( M2 , Mundarten ) ' 8x8 Matrix 2
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
Daten = lookup( M1 , Mundarten ) ' 8x8 Matrix 1, die mit dem Anschluß zum Mikrocontroller
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
incr M4 : incr M3 : incr M2 : incr M1 ' die nächste Zeile vom Mund
M_Cs = 1 ' jetzt anzeigen
next Zeile
goto Augen
 
Init_max:
for Modul = 1 to Anzahl
Befehl = &H0C : Daten = 0 ' Shutdown an, keine Ausführung möglich
gosub Send_max
Befehl = &H09 : Daten = 0 ' auf Matrixbetrieb schalten, nicht auf 7 Segmentbetrieb
gosub Send_max
Befehl = &H0A : Daten = 0 ' Helligkeit 0-15
gosub Send_max
Befehl = &H0B : Daten = 7 ' wieviel Reihen sollen benutzt werden 0-7
gosub Send_max
Befehl = &H0F : Daten = 0 ' Test aus
gosub Send_max
Befehl = &H0C : Daten = 1 ' Shutdown aus, eine Ausführung ist wieder möglich
gosub Send_max
next Modul
return
 
Matrix_leeren:
for Modul = 1 to Anzahl
For leeren = 1 To 8
Befehl = leeren
Daten = &B00000000
Gosub Send_max
Next leeren
next Modul
Return
 
Send_max:
if Anzahl = 1 then ' 1 sind die Augen
A_Cs = 0 : A_Din = 0 : A_Clk = 0 ' die Augen noch nicht anzeigen
shiftout A_Din , A_Clk , Befehl , 1 ' den Befehl senden
shiftout A_Din , A_Clk , Daten , 1 ' die Daten senden
A_Cs = 1 ' jetzt die Augen anzeigen
else ' 4 ist der Mund
M_Cs = 0 : M_Din = 0 : M_Clk = 0 ' den Mund noch nicht anzeigen
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
M_Cs = 1 ' jetzt den Mund anzeigen
endif
Return
 
' --- data Reihen... -------------------------------------------------------------------------------------------
 
Augenarten:
' 0 --- Augen zu ---
data &B00100000 , &B00010000 , &B00001000 , &B00001000 , &B00001000 , &B00001000 , &B00010000 , &B00100000
' 8 --- Augen auf ---
data &B00111100 , &B01000010 , &B10000001 , &B10011001 , &B10011001 , &B10000001 , &B01000010 , &B00111100
' 16 --- Augen unten ---
data &B00111100 , &B01000010 , &B10000001 , &B10110001 , &B10110001 , &B10000001 , &B01000010 , &B00111100
' 24 --- Augen links unten ---
data &B00111100 , &B01000010 , &B10110001 , &B10110001 , &B10000001 , &B10000001 , &B01000010 , &B00111100
' 32 --- Augen links ---
data &B00111100 , &B01000010 , &B10011001 , &B10011001 , &B10000001 , &B10000001 , &B01000010 , &B00111100
' 40 --- Augen links oben ---
data &B00111100 , &B01000010 , &B10001101 , &B10001101 , &B10000001 , &B10000001 , &B01000010 , &B00111100
' 48 --- Augen oben ---
data &B00111100 , &B01000010 , &B10000001 , &B10001101 , &B10001101 , &B10000001 , &B01000010 , &B00111100
' 56 --- Augen rechts oben ---
data &B00111100 , &B01000010 , &B10000001 , &B10000001 , &B10001101 , &B10001101 , &B01000010 , &B00111100
' 64 --- Augen rechts ---
data &B00111100 , &B01000010 , &B10000001 , &B10000001 , &B10011001 , &B10011001 , &B01000010 , &B00111100
' 72 --- Augen rechts unten ---
data &B00111100 , &B01000010 , &B10000001 , &B10000001 , &B10110001 , &B10110001 , &B01000010 , &B00111100
 
Mundarten:
' 0 --- Mund zu ---
data &B00000000 , &B00000000 , &B00000000 , &B01111111 , &B01111111 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B11111110 , &B11111110 , &B00000000 , &B00000000 , &B00000000
' 32 --- Mund auf ---
data &B00000000 , &B00001111 , &B00011111 , &B00011000 , &B00011000 , &B00011111 , &B00001111 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B11110000 , &B11111000 , &B00011000 , &B00011000 , &B11111000 , &B11110000 , &B00000000
' 64 --- Mund lach ---
data &B00000000 , &B01100000 , &B01110000 , &B00111100 , &B00001111 , &B00000011 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B00000110 , &B00001110 , &B00111100 , &B11110000 , &B11000000 , &B00000000 , &B00000000
' 96 --- Mund traurig ---
data &B00000000 , &B00000000 , &B00000011 , &B00001111 , &B00111100 , &B01110000 , &B01100000 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B11000000 , &B11110000 , &B00111100 , &B00001110 , &B00000110 , &B00000000
 
' --------------------------------------------------------------------------------------------------------------
 



Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#23 von BoomBoomMagic , 14.01.2020 18:59

Gibt es da auch nen Video dazu ... ?


***Lieber 2x mehr lesen , als 1x dumm fragen ***

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


RE: Nr. 6 lebt ...

#24 von Naubaddi , 14.01.2020 20:06

Ein Video kommt noch, muß erst mal etwas basteln damit das Video nicht verwackelt, die Kamera nur mit einer Hand ruhig zu halten und dann noch Tasten drücken ist nicht so einfach.

Es wird wohl doch 2 Augen an verschiedenen Post- Ausgängen geben, wollte Nr. 6 zwinkern lassen was bei parallel angeschlossenen Augen nicht geht .

Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Nr. 6 lebt ...

#25 von Naubaddi , 14.01.2020 20:33

Hm, ich habe doch noch eine alte Kamera mit einem Mini-Stativ, damit geht es recht einfach .

Am Ende von dem Video werden keine Tasten gedrückt, so kann man sehen wie Nr. 6 alle 2 Sekunden die Augen aufmacht um zu sehen was so los ist ;-). Ist alles noch nix besonderes, einfach etwas üben und sicherer werden mit dem AVR.



Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


   

C51 MCU-Entwicklungsboard
Servo ansteuern, warum einfach wenn es auch kompliziert geht ;-)

Picaxe Editor 5.5.5 Download
Update auf Picaxe Editor 5.5.6 Download
Picaxe Editor 6.x.x.x Download
Manual1.pdf        -      Grundwissen Download
Manual2.pdf        -      Befehle Download
Manual3.pdf        -      Beispiele Download


Press [Backspace] for back to Menu


Counter
Xobor Forum Software ©Xobor.de | Forum erstellen
Datenschutz