Herzlich Willkommen im einzigen (deutschsprachigem) Picaxe-Forum.

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


RE: Mein erstes AVR Projekt mit einem Attiny44A

#26 von BoomBoomMagic , 22.12.2019 11:03

Guten Morgen allerseits .


Das hast Du sehr schön gemacht , gefällt mir sehr gut



Ach ja , diese verflixten Fusebits.
Wie gesagt , ich kann Dir ja gern das so machen , das ich das im Code generieren lasse ,
Du diesen Satz einmal mit programmierst , dann sind Fusebits und Chip passend.

Beispiel :

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
 

 
$PROG &HFF,&HE2,&HDF,&HFF ' Dieser Satz brauch nur 1x aktivert sein , wenn man den Chip das 1. Mal benutzt
 
$regfile = "attiny85.dat"
$crystal = 128000
$hwstack = 16
$swstack = 16
$framesize = 32

config portb.0 =output
config portb.1 =output
config portb.2 =output
config portb.3 =input
config portb.4 =input
config portb.5 =output

 
Do

Toggle PortB.0
Toggle PortB.1
Toggle PortB.2
Waitms 1000

Loop

End
 
 



Ich muß nur mal sehen wo ich mein Board für die Attiny84 habe , dann kann ich auch da den Hex Code generieren.

Das wird insbesondere wichtig , wenn du den Atmega8 und 328 beginnst zu nutzen !


*** 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 22.12.2019 | Top

RE: Mein erstes AVR Projekt mit einem Attiny44A

#27 von Naubaddi , 22.12.2019 21:16

Es ist fertig, das Lauflicht was so ein wenig wie bei K.I.T.T. aussieht:

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
 
' Compiler: Bascom-Demo 2.0.7.5
 
$regfile = "attiny44.dat"
$crystal = 1000000
$hwstack = 30
$swstack = 30
$framesize = 30
 
config porta.0 =output
config porta.1 =output
config porta.2 =output
config porta.3 =output
config porta.4 =output
config porta.5 =output
config porta.6 =output
config porta.7 =output
config portb.0 =output
config portb.1 =output
config portb.2 =output
config portb.3 =output
 
Dim P1 as Byte
 
P1 = 100
 
do
 
' nach rechts
 
portb.1 = 1 ' LED 5 ein
portb.0 = 1 ' LED 6 ein
waitms P1
porta.0 = 1 ' LED 7 ein
portb.1 = 0 ' LED 5 aus
waitms P1
portb.0 = 0 ' LED 6 aus
porta.1 = 1 ' LED 8 ein
waitms P1
porta.0 = 0 ' LED 7 aus
porta.2 = 1 ' LED 9 ein
waitms P1
porta.1 = 0 ' LED 8 aus
porta.3 = 1 ' LED 10 ein
waitms P1
porta.2 = 0 ' LED 9 aus
porta.4 = 1 ' LED 11 ein
waitms P1
porta.3 = 0 ' LED 10 aus
porta.5 = 1 ' LED 12 ein
waitms P1
 
' --- nach links
 
porta.5 = 0 ' LED 12 aus
porta.3 = 1 ' LED 10 ein
waitms P1
porta.4 = 0 ' LED 11 aus
porta.2 = 1 ' LED 9 ein
waitms P1
porta.3 = 0 ' LED 10 aus
porta.1 = 1 ' LED 8 ein
waitms P1
porta.2 = 0 ' LED 9 aus
porta.0 = 1 ' LED 7 ein
waitms P1
porta.1 = 0 ' LED 8 aus
portb.0 = 1 ' LED 6 ein
waitms P1
portb.1 = 1 ' LED 5 ein
porta.0 = 0 ' LED 7 aus
waitms P1
 
loop
 
end
 



Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#28 von BoomBoomMagic , 22.12.2019 21:48

Ja super gemacht ...

und hier fürs Auge damit sich die Leute etwas drunter vorstellen können


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#29 von BoomBoomMagic , 22.12.2019 22:10

Ich hät ja gesagt , wie wäre es mal mit dem WS2803 ?
Aber , ich glaube das ist noch etwas früh


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#30 von Naubaddi , 23.12.2019 11:30

O.K. das ist ein Lauflicht , deswegen wohl "Naubaddis NightRider 001" .

Ein weiteres kleines Programm mit LEDs und einem Taster funktioniert auch schon, was mir fehlt ist etwas wie "start1: ... goto start1". Also ein Multitask damit der Taster nicht warten muss wenn die LEDs noch beschäftigt sind, im I-Net konnte ich nix finden oder habe nicht richtig gesucht.

Dann war da noch ein AKKU der für ein RC-Projekt geplant war, er wurde jetzt zum "Chip to Go" Projekt:


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
 
' Compiler: Bascom-Demo 2.0.7.5
 
$regfile = "attiny85.dat"
$crystal = 1000000
$hwstack = 16
$swstack = 16
$framesize = 32
 
config portb.0 = output
config portb.1 = output
config portb.2 = output
config pinb.3 = input
config pinb.4 = input
 
Dim ein as Bit
ein = 0
 
Do
 
if pinb.3 = 1 then
if ein = 0 then
ein = 1
do
if pinb.3 = 0 then exit do
loop
else
ein = 0
portb.0 = 0
portb.1 = 0
portb.2 = 0
do
if pinb.3 = 0 then exit do
loop
endif
waitms 500
endif
 
if ein = 1 then
Toggle PortB.0
Waitms 100
Toggle PortB.1
Waitms 200
Toggle PortB.2
Waitms 300
endif
 
Loop
 
End
 



Grüßle, Naubaddy

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#31 von BoomBoomMagic , 23.12.2019 11:50

Also , grundsätzlich : Es gibt kein Multitasking !


Weder am PC , noch an der Picaxe.


Es werden lediglich die Task schrittweise nacheinander (sehr schnell ) abgearbeitet.
Bei der Picaxe erweckt es den Eindruck , als würde dieser Multitask können.
Zudem lassen die Befehle : Start1 ...Start2...Start3 .....
das auch noch sehr stark annehmen.
Haben die von Education auch sehr schön umgesetzt.Besonders einfach für Anfänger anzuwenden.


Der AVR hat (leider) kein Multitasking .

Beim AVR gibt es eben verschiedene Timer und man setzt hier mehr auf Hirnschmalz.
( Wir sind ja jetzt auch eine andere Liga )


Da Deine Codes doch .... ähm ... ziemlich ... eigenwillig sind ,

Würde ich gern mal mit Deinen eigenen Worten hören , WAS , WANN , WIE da so passieren soll ??


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#32 von Naubaddi , 23.12.2019 12:24

Das es kein Multitask geben kann wenn nur einer rechnet ist mir seit den ATARI-Zeiten bekannt, man nennt es halt so.

Was ich möchte: der Taster soll alle 10ms abgefragt werden und seinem Zustand entsprechend die Variable ein auf 0 oder 1 setzen und den Ablauf der LEDs stoppen oder starten.

Timer hört sich gut an wenn sie so funktionieren wie bei Gambas (ist für Linux Programme), so ein Timer wird für meine Pendeluhr eingesetzt was so aussieht:

der Timer für den Gong wird 1 mal pro Sekunde ausgeführt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 

Public Sub tGong_Timer() ' Timer für den Gong
Dim i12 As Integer ' Variable für maximal 12 mal einen Gong
If iAnsicht = 3 And mp.URL ' wenn die Benutzeruhr aktiv ist und eine Gong Datei ausgewählt ist
If Minute(Now) = 30 And Second(Now) < 2 Then PlayGong(1) ' einen Gong für jede halbe Stunde abspielen
If Minute(Now) = 0 And Second(Now) < 2 ' wenn es eine volle Stunde ist
i12 = Hour(Now) ' die aktuelle Stunde
If i12 > 12 Then i12 = Hour(Now) - 12 ' wenn die aktuelle Stunde größer 12 ist die aktuelle Stunde - 12
If i12 = 0 Then i12 = 12 ' bei 0 Uhr auf 12 Uhr setzen
PlayGong(i12) ' einen Gong für jede Stunde abspielen
Endif ' Ende von: wenn es eine volle Stunde ist
Endif ' Ende von: wenn die Benutzeruhr aktiv ist und eine Gong Datei ausgewählt ist
End ' Ende von: Timer für den Gong
 
 



hier wird der Gong abgespielt mit der Info vom Timer wie oft:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 

Public Sub PlayGong(iMal As Integer) ' zu jeder Stunde (halben Stunde) einen Gong abspielen
Dim iAktuell As Integer = 1 ' aktueller Gong
tGong.Stop ' Gong-Timer stoppen
While iAktuell < iMal ' bis zum vorletzten Gong wiederholen (bei 2 Sekunden wird der Gong abgebrochen)
Inc iAktuell ' die Anzahl der Gongs um 1 erhöhen
mp.Play ' Gong-Datei abspielen
Wait 2 ' 2 Sekunden warten
mp.Stop ' abspielen der Gong-Datei stoppen (der nächste Gong soll abgespielt werden)
Wend ' Ende von: bis zum vorletzten Gong wiederholen
mp.Play ' Gong-Datei abspielen
Wait 3 ' 3 Sekunden warten bis die Gong-Datei bis zum Ende abgespielt wurde
mp.Stop ' abspielen der Gong-Datei stoppen
tGong.Start ' Gong-Timer starten
End ' Ende von: zu jeder Stunde (halben Stunde) einen Gong abspielen
 
 



Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#33 von BoomBoomMagic , 23.12.2019 12:29

Ok.

Du hast da 3 LED die ihren Status ändern.(An - Aus - An - Aus ... )

Jetzt soll nen Taster diesen Ablauf aktivieren ODER wenn's bereist läuft wieder de-aktivieren - richtig ?


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#34 von Naubaddi , 23.12.2019 12:53

Ja so ist es, funktioniert ja auch schon mit einem kleinen Schönheitsfehler, einschalten ist kein Problem und funktioniert ohne Verzögerung. Ausschalten geht auch wenn man den Taster drückt bis die LEDs fertig sind und wieder oben bei "do" der Taster kommt.

Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#35 von BoomBoomMagic , 23.12.2019 13:00

Ok , hier mal der Code :



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
 

 
$regfile = "attiny85.dat"
$crystal = 1000000
$hwstack = 16
$swstack = 16
$framesize = 32
 
config portb.0 = output
config portb.1 = output
config portb.2 = output
config pinb.3 = input
config pinb.4 = input
 

LED1 alias Portb.0
LED2 alias Portb.1
LED3 alias Portb.2
 
Taster1 alias pinb.3
 

 
dim Check as byte
dim w as byte
 

 
Main:
 
If Taster1=1 then
waitms 50
check=1
endif
 

 
if check=1 then
 
toggle LED1
 
for w=1 to 10
if Taster1=1 then
check=0
LED1=0
LED2=0
LED3=0
goto main
endif
waitms 10
next w
 

toggle LED2
 
for w=1 to 20
if Taster1=1 then
check=0
LED1=0
LED2=0
LED3=0
goto main
endif
waitms 10
next w
 

 
toggle LED3
 
for w=1 to 30
if Taster1=1 then
check=0
LED1=0
LED2=0
LED3=0
goto main
endif
waitms 10
next w
 

endif
 
goto Main
end
 

 





ALLE Variablen sind bei Start immer = 0

Insofern ist check auch = 0

Sobald den Taster drückst wird check auf 1 gesetzt.
Die nächste IF Anweisung sieht das check=1 ist und wird ausgeführt.

In dieser Anweisung werden nun die LED's an oder aus geschaltet.
Wir nutzen die Pause um die Abfrage nach dem Taster zu machen.
Wir halten die Pause sehr klein im Zusammenhang mit einer FOR NEXT Schleife.
Das stört weder den Ablauf und reicht zum reagieren auf den Taster.

Wird während der IF Anweisung der Taster gedrückt , wird check auf 0 gesetzt , die LED's
alle ausgemacht und wieder nach MAIN gesprungen - das Spiel beginnt von vorn.


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#36 von BoomBoomMagic , 23.12.2019 13:41

Mal so aus Spaß , .... bei der Picaxe sieht des 1:1 genauso 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
 


#picaxe 08m2
 

symbol LED1=b.0
symbol LED2=b.1
symbol LED3=b.2
symbol Taster1=pinb.3

 

symbol check=b0
symbol w=b1
 

Main:

If Taster1=1 then
pause 50
do:loop until Taster1=0
check=1
endif

 

if check=1 then

toggle LED1

for w=1 to 10
if Taster1=1 then
check=0
low LED1
low LED2
low LED3
goto main
endif
pause 10
next w

 
toggle LED2

for w=1 to 20
if Taster1=1 then
check=0
low LED1
low LED2
low LED3
goto main
endif
pause 10
next w

 

toggle LED3

for w=1 to 30
if Taster1=1 then
check=0
low LED1
low LED2
low LED3
goto main
endif
pause 10
next w

 
endif

goto Main
 

 




Ich wüßte nicht wozu man da Multitasking bräuchte ??


*** 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 23.12.2019 | Top

RE: Mein erstes AVR Projekt mit einem Attiny44A

#37 von Naubaddi , 23.12.2019 15:53

Hm, Dein Lauflicht funktioniert bis auf die Kleinigkeit das man es nicht ausschalten kann, und bei mir sieht es mit einer PICAXE auch anders aus.

Lassen wir den Begriff MultiTask mal weg, es geht mir um einen übersichtlichen Programmtext der nicht von goto überschwemmt ist. Goto vermeide ich auch in anderen Programmiersprachen, es werden Funktionen, Prozeduren, Timer oder ähnliches verwendet, diese werden dann gezielt eingesetzt. Es werden auch wenn nicht nötig Variablen vordefiniert, bei einigen Programmiersprachen gibt es sonst Probleme bzw. es ist zwingend notwendig. Und damit ich nicht so oft nachdenken muss womit ich gerade programmiere wird einfach so ähnlich wie möglich in allen Programmiersprachen gleich geschrieben.

Egal, mir fällt schon noch etwas ein wie so ein AVR das macht was ich will.

So sieht das Lauflicht für einen 08M2 bei mir 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
 

; picaxe08m2 ; automatische Compilerauswahl für gedit
; Dateiname: 1 Lauflicht.axe
; Funktion: ein Lauflicht im Multitask
; Datum: Start 23.12.2019, Stand 23.12.2019
; Von: Naubaddi
;
; PICAXE 08M2 Alle Pin Funktionen (C.0 nur Ausgang, C.3 nur Eingang)
;
; +---v---+
; +V |1 8| 0V
; RxD/I C.5 |2 7| C.0 O/TxD/hserout/DAC
; Touch/ADC/O/I C.4 |3 6| C.1 I/O/ADC/Touch/hserin/SRI/hi2c/scl
; I C.3 |4 5| C.2 I/O/ADC/Touch/pwm/tune/SRQ/hi2c sda
; +-------+
;
suspend 1 ; Multitask für das Blinklicht ausschalten
;
symbol LED1 = C.0 ; Ausgang für LED 1
symbol LED2 = C.2 ; Ausgang für LED 2
symbol LED3 = C.4 ; Ausgang für die Hupe oder Eingang für die Umschaltung auf Blinker/Warnblinker
symbol Taster = pin3 ; Eingang für einen Taster
;
symbol BI = w0 ; Blinkinterval in ms
symbol ein = b2 ; Lauflicht ein oder aus 0 = aus und 1 = ein
;
low LED1 ; LED 1 ausschalten
low LED2 ; LED 2 ausschalten
low LED3 ; LED 3 ausschalten
;
BI = 200 ; Blinkinterval auf x Milisekunden setzen
ein = 0 ; Lauflicht aus
;
Lauflicht: ; Hauptschleife für das Lauflicht
;
if Taster = 1 then ; wenn der Taster gedrückt wurde
;
if ein = 0 then ; und ein = 0 ist (das Lauflicht ist aus)
ein = 1 ; ein auf 1 setzen (Lauflicht ein)
restart 1 ; das Lauflicht (den Multitask) einschalten
else ; sonst
ein = 0 ; ein auf 0 setzen (Lauflicht aus)
suspend 1 ; das Lauflicht (den Multitask) ausschalten
low LED1 ; LED 1 ausschalten
low LED2 ; LED 2 ausschalten
low LED3 ; LED 3 ausschalten
endif
;
do ; Warteschleife
pause 10 ; x Millisekunden Pause
loop until Taster = 0 ; die Warteschleife verlassen wenn der Taster aus ist
else ; sonstdas Lauflicht (den Multitask) ausschalten
endif
;
goto Lauflicht
;
start1: ; Multitask für das Lauflicht
;
pause BI ; x Millisekunden Pause
high LED1 ; LED 1 einschalten
pause BI ; x Millisekunden Pause
high LED2 ; LED 1 einschalten
pause BI ; x Millisekunden Pause
high LED3 ; LED 1 einschalten
pause BI ; x Millisekunden Pause
;
low LED1 ; LED 1 ausschalten
low LED2 ; LED 2 ausschalten
low LED3 ; LED 3 ausschalten
;
goto start1
;
 



Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#38 von Naubaddi , 23.12.2019 16:52

So, es läuft schon fast so wie ich es mag, noch ein wenig nachdenken wie der Taster schneller abgefragt werden kann und gut ist.

Das Lauflicht-Programm welches man ein/aus schalten kann:

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
 

' Compiler: Bascom-Demo 2.0.7.5
 
' Dateiname: 1 Lauflicht.axe
' Funktion: ein LED-Lauflicht mit einem Taster einschalten/ausschalten
' Datum: Start 23.12.2019, Stand 23.12.2019
' Von: Naubaddi
 
' --- Mikrocontroler Daten -------------------------------------------------------------------------------------
 
$regfile = "attiny85.dat"
$crystal = 1000000
$hwstack = 16
$swstack = 16
$framesize = 32
 
' --- Deklaration ----------------------------------------------------------------------------------------------
 
config portb.0 = output
config portb.1 = output
config portb.2 = output
config pinb.3 = input
config pinb.4 = input

LED1 alias Portb.0
LED2 alias Portb.1
LED3 alias Portb.2

Taster1 alias pinb.3
 
' --- Variablen ------------------------------------------------------------------------------------------------

dim ein as bit
dim LI as byte
 
' --- Vorbelegung der Variablen und Alias ----------------------------------------------------------------------
 
LED1 = 0
LED2 = 0
LED3 = 0
ein = 0
LI = 200
 
' --- Programm Anfang ------------------------------------------------------------------------------------------

Lauflicht:
 
gosub Taster_abfragen
 
if ein = 1 then
 
LED1 = 1
waitms LI
gosub Taster_abfragen
if ein = 0 then goto Lauflicht
 
LED2 = 1
waitms LI
gosub Taster_abfragen
if ein = 0 then goto Lauflicht
 
LED3 = 1
waitms LI
gosub Taster_abfragen
if ein = 0 then goto Lauflicht
 
LED1 = 0
LED2 = 0
LED3 = 0
waitms LI
 
else
LED1 = 0
LED2 = 0
LED3 = 0
 
endif
 
goto Lauflicht
 
' --- Funktionen -------------------------------------------------------------------------------------------------
 
Taster_abfragen:
 
if Taster1 = 1 then
if ein = 0 then
ein = 1
else
ein = 0
endif
do
waitms 10
loop until Taster1 = 0
endif
 
return
 
' --- Programm Ende --------------------------------------------------------------------------------------------
 
end
 
 



Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#39 von Naubaddi , 23.12.2019 17:01

Oo, hatte doch glad vergessen das man mit BASCOM mehr Befehle hat, mit toggle reagiert das Programm schon schneller auf einen Tastendruck .

Die neue Funktion Taster_abfragen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
' --- Funktionen -------------------------------------------------------------------------------------------------
 
Taster_abfragen:
 
if Taster1 = 1 then
toggle ein
do
waitms 10
loop until Taster1 = 0
endif
 
return
 

 



Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#40 von BoomBoomMagic , 23.12.2019 17:07

soll ich mal ganz ehrlich sein ?


Für diesen Popelkram hol ich noch nicht mal nen Board hervor .

Ich mach das alles was ich bisher geschrieben habe an Code lediglich aus dem Kopf , rein imaginär !
Natürlich kann es sein , da ich sowas schon über 5000x gemacht habe das ich aus Flüchtigkeit vielleicht etwas übersehen habe ....
kann ich mir eigentlich nicht vorstellen ...

aber ich sach mal so .... ein bischen mitdenken , testen , üben , probieren .... ich geb ja nur die Richtung vor , keine Komplettlösungen , gelle
wie heißt es doch so schön : learning by doing

nur wenns gar nicht mehr weiter geht , dann spring ich wieder ein.


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#41 von BoomBoomMagic , 23.12.2019 17:12

Ich bin ja seit 1981 Programmierer.

Ist aber echt nett das Du mir erklärst wie ich so ein Programm aufbauen muss , danke


Durch den Befehl Gosub Taster_abfrage hast du dein Programm um 10% verlangsammt !
Ist bei dem Projekt nicht wild .......wirst Du ggf. mal später selber feststellen das das ne ganz ordentliche Bremse ist.
Aber .... ich programmiere ja noch nicht so lang


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#42 von Naubaddi , 23.12.2019 17:22

Ruhig Blut Brauner, alles ist gut. Für mich ist es kein Popelkram, es sind meine ersten Schritte mit dem AVR.

Bingo, 1981 habe auch ich meine ersten Versuche mit dem Programmieren gestartet, notgedrungen weil ich keinen C64 hatte und es für meinen Computer keine Software gab.

Das der Gosub Befehl diese blöden Mikrocontroller verlangsamt ist mir klar, an einer besseren Lösung wird gearbeitet. Werde mal nachlesen wie so ein Timer bei einem AVR funktioniert, wenn es wie bei Gambas funktioniert sind alle Probleme in dieser Richtung Schnee von Gestern.

Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#43 von Naubaddi , 23.12.2019 17:26

Und schon gefunden den Timer ich.

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#44 von BoomBoomMagic , 23.12.2019 17:27

Also so wie das jetzt hast ist schon ............ mutig, aber jetzt auch noch mit TIMER ???

Hättest auch selbst drauf kommen können , hab das mal eben mit nem Mega8 getestet , ausnahmsweise ...
der Taster war nicht entprellt - und schon läufst mit dem Nachbarn ( sag ja , kleiner Gedankenfehler)


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
 

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 16
$swstack = 16
$framesize = 32
 
config portb.0 = output
config portb.1 = output
config portb.2 = output
config pinc.3 = input
config pinc.4 = input
 

LED1 alias Portb.0
LED2 alias Portb.1
LED3 alias Portb.2
 
Taster1 alias pinc.3
 

 
dim Check as byte
dim w as byte
 

 
Main:
 
If Taster1=1 then
waitms 100
do:loop until Taster1=0
check=1
endif
 

 
if check=1 then
 
toggle LED1
 
for w=1 to 10
if Taster1=1 then
check=0
LED1=0
LED2=0
LED3=0
do:loop until Taster1=0
goto main
endif
waitms 10
next w
 

toggle LED2
 
for w=1 to 20
if Taster1=1 then
check=0
LED1=0
LED2=0
LED3=0
do:loop until Taster1=0
goto main
endif
waitms 10
next w
 

 
toggle LED3
 
for w=1 to 30
if Taster1=1 then
check=0
LED1=0
LED2=0
LED3=0
do:loop until Taster1=0
goto main
endif
waitms 10
next w
 

endif
 
goto Main
end
 
 


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#45 von BoomBoomMagic , 23.12.2019 17:31

Is schon gewaltig daste für Dein MF1 3 Stk Picaxe nehmen mußt , das könnte nen mega8 im Standgas ...
aber daste jetzt nen Timer nehmen willst .... chuuih , na da bin ich mal gespannt waste da so zusammen bastelst


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#46 von BoomBoomMagic , 23.12.2019 18:09

Wenn Du mit TIMER arbeitest , kommt es ja extrem auf das Timing an.

Da da die Pausen und das Zusammenspiel genau passen müssen , immerhin laufen 2 Aktionen unabhängig von einander , mal eben ein Beispiel mit TIMER und Mega8 :

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
 

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 16
$swstack = 16
$framesize = 32
 
config portb.0 = output
config portb.1 = output
config portb.2 = output
config pinc.3 = input
config pinc.4 = input
 

' TIMER Zeit auf 200ms eingestellt
Config Timer1 = Timer, Prescale = 64
 

 
LED1 alias Portb.0
LED2 alias Portb.1
LED3 alias Portb.2
 
Taster1 alias pinc.3
 

 
dim Check as byte
dim w as byte
Const Timer1_Preload = 40536
 

Enable Timer1
Timer1 = Timer1_Preload
On Timer1 Isr_Timer1
Enable Interrupts
 

Do
 

 
if check=1 then
toggle LED1:waitms 100
toggle LED2:waitms 100
toggle LED3:waitms 100
else
LED1=0
LED2=0
LED3=0
endif
 
loop
end
 

 

Isr_Timer1:
Timer1 = Timer1_Preload
 
if Taster1=1 then
waitms 100
if check=0 then
check=1
else
check=0
endif
endif
 
Return
 

 



Kann man machen ..... MACHT man aber nicht - nicht bei sowas.

Da hier der TIMER1 nun (unnötig) beansprucht wird , steht dieser für andere Zwecke z.B nicht mehr zur Verfügung.
Das kann IR , Servo , LCD ,Tastatur , I²C,SPI, weiß der Geier noch alles sein .
Man hat noch Timer0 und Timer2 , aber dieser Timer1 ist ein 16Bit Timer und ziemlich wichtig.


*** 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 23.12.2019 | Top

RE: Mein erstes AVR Projekt mit einem Attiny44A

#47 von Naubaddi , 23.12.2019 20:59

Nicht nehmen musst, der MF1 ist aus Resten gebaut und das waren alles Reste die in der Kramkiste so rumlagen, schön übersichtlich auf den Arbeitsplatz gelegt und rausgesucht was brauchbar sein könnte. Und aus den Restteilen wurde das MF1 gebastelt, wenn ohne Reste gebastelt würde wäre es 1 Mikrocontroller gewesen der alle Funktionen übernimmt. Und wo bleibt dann der Spaß aus Müll etwas zu basteln?

Das so ein Mikrocontroller gerade mal 3 Timer hat habe ich schon gelesen , O.K. also sparsam mit den Timern umgehen.

Das Lauflichtprogramm mag ja Popelkram sein, es geht mir doch nur um das Verstehen wie so ein AVR reagiert und nicht um ein umfangreiches Programm.

Das Lauflichtprogramm macht jetzt was es soll:

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
 
' Compiler: Bascom-Demo 2.0.7.5
 
' Dateiname: Lauflicht mit Taster.axe
' Funktion: ein Lauflicht mit einem taster einschalten/ausschalten
' Datum: Start 23.12.2019, Stand 23.12.2019
' Von: Naubaddi
 
' --- Mikrocontroler Daten -------------------------------------------------------------------------------------
 
$regfile = "attiny85.dat"
$crystal = 1000000
$hwstack = 16
$swstack = 16
$framesize = 32
 
' --- Deklaration ----------------------------------------------------------------------------------------------
 
config portb.0 = output
config portb.1 = output
config portb.2 = output
config pinb.3 = input
config pinb.4 = input
 
LED_1 alias portb.0
LED_2 alias portb.1
LED_3 alias portb.2
Taster_1 alias pinb.3
 
' --- Timer ----------------------------------------------------------------------------------------------------
 
Config Timer0 = Timer , Prescale = 8 ' Konfiguriert den Timer
Enable Timer0 ' schalte den Timer ein
On Timer0 Taste ' verzweige bei Timerüberlauf zu Taste
Enable Interrupts ' Interrupt einschalten
 
' --- Variablen... ---------------------------------------------------------------------------------------------
 
dim ein as bit ' Lauflicht einschalten/ausschalten, ein = 1, aus = 0
 
' --- Vorbelegung der Variablen... -----------------------------------------------------------------------------
 
LED_1 = 0 ' LED 1 ausschalten
LED_2 = 0 ' LED 2 ausschalten
LED_3 = 0 ' LED 3 ausschalten
ein = 0 ' Lauflicht ausschalten
 
' --- Programm Anfang ------------------------------------------------------------------------------------------

do
 
if ein = 1 then
LED_1 = 1
waitms 200
endif
 
if ein = 1 then
LED_2 = 1
waitms 200
endif
 
if ein = 1 then
LED_3 = 1
waitms 200
endif
 
if ein = 1 then
LED_1 = 0
waitms 200
endif
 
if ein = 1 then
LED_2 = 0
waitms 200
endif
 
if ein = 1 then
LED_3 = 0
waitms 200
endif
 
if ein = 0 then
LED_1 = 0
LED_2 = 0
LED_3 = 0
endif
 
loop
 
end
 
' --- Timer ----------------------------------------------------------------------------------------------------
 
Taste: ' Timer für die Taste
 
if Taster_1 = 1 then ' wenn die Taste zu ist
toggle ein ' den Zustand von ein (0 oder 1) wechseln
do ' Warteschleife für den Tastenzustand (auf oder zu)
waitms 10 ' 10 ms Pause
loop until Taster_1 = 0 ' die Schleife verlassen wenn der Taster auf ist
endif
 
return
 
 



Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#48 von BoomBoomMagic , 23.12.2019 21:38

Nungut , ich halt mich dann mal etwas zurück .....

.... aber .... einen kann ich mir nicht verkneifen :

WENN du fragst :
If ein=1 then ...

dann ist ein ja 1 !
interessant daste dann noch mal fragst : If ein =1 ...
und nochmal : If ein=1 ...
und nochmal : If ein=1 ...
und nochmal : If ein =1 ...
und nochmal : If ein =1 ...


Natürlich geht es hier anfangs noch so üüüüüberhaupt nicht um professionelle ProgrammCodes und suuuper Projekte.
Ist ja auch schön das man gern alles mal ausprobieren will.
Aber man sollte sich dennoch am Anfang immer fragen , ob man die oder die Funktion wirklich brauch ?
Ich mein , der AVR hat noch weit mehr drauf , so gesehen ;-)
Aber gleich mit Raketen auf Spatzen schiessen ??

Man läuft da Gefahr sich einen Stil anzugewöhnen , der es einem bei wirklich schweren Sachen arg problematisch macht.


Bestes Beispiel ist :
Damals mit dem ATARI programmieren.
Da mußte man mit 1-4MB und 10 MB Festplatte Sachen realisieren wo man heute sagt : 1GB ? 2GB ?
Kein Problem , packen wa ne Schippe mehr drauf .


Wenn der Code jetzt bei Dir läuft - ok.
Ob der jetzt so optimal ist , ist eine andere Sache .
Hauptsache du hast den Umgang mit dem AVR Stück für Stück jetzt ein bischen drauf.




Zitat von Naubaddi im Beitrag #47
der MF1 ist aus Resten gebaut und das waren alles Reste die in der Kramkiste so rumlagen

Da hat wohl jeder seine eigene Kramkiste aus die er schöpft


(.... und das war nur 1 Seite ... )


*** 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: Mein erstes AVR Projekt mit einem Attiny44A

#49 von Naubaddi , 23.12.2019 21:51

Es geht in diesem Programm um die Taste die so schnell wie möglich abgefragt werden soll und um die schnellstmögliche Reaktion darauf, also Taste drücken "Lauflicht läuft sofort", nochmal Taste drücken "Lauflicht sofort aus". Ohne diese vielen Ifs würde das Lauflicht bis zum Ende laufen. Ist bei so einem Lauflicht egal, mir ging es um das Verständnis wie es gemacht werden kann.

Grüßle, Naubaddi

Naubaddi  
Naubaddi
Beiträge: 288
Registriert am: 29.01.2019


RE: Mein erstes AVR Projekt mit einem Attiny44A

#50 von BoomBoomMagic , 23.12.2019 22:19

Ich glaube , da hast Du einen Gedanken fehler

Wenn ich zwischen jeder If eine Abfrage nach dem Taster mache ist das weit schneller , als
wenn ein Timer erst seine Zeit ablaufen muss , seine Reaktion zu einer Aktion ( ein=1) machen , diese von
einer fremden Schleife erfassen muss.

Is ja nicht so das die beiden Aktionen synchron laufen , sonder sie müssen sich wie zwei Blinker zufällig mal treffen.
Während bei einer IF mit Abfrage KANN garnicht anders reagiert werden als SOFORT ein STOP.

Das is ja wie beim PC .
Mein ATARI Falcon , läuft heute noch 10x schneller als ein i7.

Warum ?
Ein ATARI ist kein Bausteinsystem wie ein PC.
Da ist ein Teil auf das Andere abgestimmt.
Man kann ihn nur komplett neu kaufen wenn man es schneller haben will.

Beim PC läuft die CPU mit Takt ' x ' ,
die Grafikkarte mit Takt ' y ' ,
der Speicher mit Takt ' z '

verschiedene Takte die dann irgendwann 1x synchron ticken.
Darum , is zu langsam ? Kauf ne schnellere Karte , Speicher , CPU ...
Sie werden dadurch immer noch nicht synchron , aber die Zeit bis sie synchron laufen is 2% kürzer.

Aber wir sind ja erst am Fuss des Berges, der Aufstieg is ja noch laaaaang

Aber sach mal , Du hast mit Gambas schon was gemacht ?
Ich hatte mir auch mal vor Jahren Ubuntu und Gambas installiert um unseren Stefan mal
ein bischen auf die Sprünge zu helfen das zu lernen, ...... aber er war leider sehr lernresistent
und arg talentfrei in Sachen Programmierung :-(
Gambas is ja die kleine Schwester in Linux zu VB unter Windows ;-)


*** 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


   

8 Kanal Lauflicht Übung

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