Forum: Mikrocontroller und Digitale Elektronik Starten eines Programmes Atmega8


von Tx (Gast)


Lesenswert?

Hallo Leuts,


ich habe vor mein LED Programm mit einem Taster zu starten.
die Software habe ich in Bascom geschrieben, kann sich das mal jemand an 
gucken ob das so stimmt mit dem Starten des LED Programmes?


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




Config Portb = Output
Config Portc = Output
Config Pinc.4 = Input

Led1 Alias Portb.0                                          'Benennt die 
Ports mit der Jeweiligen LED
Led2 Alias Portb.1
Led3 Alias Portb.2
Led4 Alias Portb.3
Led5 Alias Portb.4
Led6 Alias Portb.5
Led7 Alias Portc.0
Led8 Alias Portc.1
Led9 Alias Portc.2
Led10 Alias Portc.3

Taster Alias Portc.4                                        'Einlesen 
des Tasters



Do


If Taster = 1 Then                                          'Led 
Programm starten
Goto Led:
End If


Led:                                                        ' Led 
Programm

Led1 = 1
Waitms 50
Led1 = 0
Waitms 50

Led2 = 1
Waitms 50
Led2 = 0
Waitms 50

Led3 = 1
Waitms 50
Led2 = 0


Loop


End

von Peter (Gast)


Lesenswert?

Ich kenn zwar Bascom nicht aber ich vermute das es nicht geht.

Denn was passiert denn wenn die IF bedingung nicht war ist, als nächsten 
kommt er ja immer zu deinem Programm.

von Tx (Gast)


Lesenswert?

Peter schrieb:
> Ich kenn zwar Bascom nicht aber ich vermute das es nicht geht.
>
> Denn was passiert denn wenn die IF bedingung nicht war ist, als nächsten
> kommt er ja immer zu deinem Programm.


und wie mache ich das.....

von Samuel C. (dragonsam)


Lesenswert?

1. Dein Pin wird als "Tasters" deklariert, später wird "Taster" 
abgefragt.
2. So etwas macht man nicht nicht mit GOTO sondern GOSUB, denn so ist 
dein Label in die Hauptschleife integriert und wird somit in jedem 
Durchgang aufgerufen, egal ob der Taster gedrückt ist oder nicht.
3. Normalerweise zieht man Taster nicht auf 5V sondern auf GND, denn 
dann kannst du den internen Pullup aktivieren.

von Tx (Gast)


Lesenswert?

Samuel C. schrieb:
> 1. Dein Pin wird als "Tasters" deklariert, später wird "Taster"
> abgefragt.
> 2. So etwas macht man nicht nicht mit GOTO sondern GOSUB, denn so ist
> dein Label in die Hauptschleife integriert und wird somit in jedem
> Durchgang aufgerufen, egal ob der Taster gedrückt ist oder nicht.
> 3. Normalerweise zieht man Taster nicht auf 5V sondern auf GND, denn
> dann kannst du den internen Pullup aktivieren.

so jetzt ?

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




Config Portb = Output
Config Portc = Output
Config Pinc.4 = Input

Led1 Alias Portb.0                                          'Benennt die 
Ports mit der Jeweiligen LED
Led2 Alias Portb.1
Led3 Alias Portb.2
Led4 Alias Portb.3
Led5 Alias Portb.4
Led6 Alias Portb.5
Led7 Alias Portc.0
Led8 Alias Portc.1
Led9 Alias Portc.2
Led10 Alias Portc.3

Taster Alias Portc.4                                        'Einlesen 
des Tasters



Do


If Taster = 1 Then
Led10 = 0
End If
Gosub Sub


Sub:
Led2 = 1
Waitms 40
Led2 = 0
Waitms 40



Loop


End

von Skua (Gast)


Lesenswert?

1
$regfile = "m8def.dat"
2
$crystal = 3690000
3
4
Config Portb = Output
5
Config Portc = Output
6
Config Pinc.4 = Input
7
8
Led1 Alias Portb.0                  'Benennt die Ports mit der Jeweiligen LED
9
Led2 Alias Portb.1
10
Led3 Alias Portb.2
11
Led4 Alias Portb.3
12
Led5 Alias Portb.4
13
Led6 Alias Portb.5
14
Led7 Alias Portc.0
15
Led8 Alias Portc.1
16
Led9 Alias Portc.2
17
Led10 Alias Portc.3
18
19
Taster Alias Portc.4                 'Einlesen des Tasters
20
21
Do
22
  If Taster = 1 Then                 'Led Programm starten
23
                                     'Led Programm
24
    Led1 = 1
25
    Waitms 50
26
    Led1 = 0
27
    Waitms 50
28
29
    Led2 = 1
30
    Waitms 50
31
    Led2 = 0
32
    Waitms 50
33
34
    Led3 = 1
35
    Waitms 50
36
    Led2 = 0
37
  End If
38
Loop
39
40
41
End

Versuch mal möglichst ohne GoTo zu arbeiten.

Was ist denn daraus geworden.
Beitrag "Untereinander Verknüfen?"

Code einrücken.

Beim Posten Formatierung "code" benutzen

Nach dem Befehl GoSub macht er in der nächsten Zeile weiter.

von Tx (Gast)


Lesenswert?

okay und wie mache ich das wenn ich jetzt den taster  ein zweites mal 
betätigt habe, dass er eine andere led ansteuert ?

von Samuel C. (dragonsam)


Lesenswert?

Jetzt hast du den Code nur noch verschlimmert. Bei Punkt 1 muss ich mich 
entschuldigen, da habe ich mich verlesen, der stimmt.

GOSUB heißt, dass die Routine außerhalb der Hauptschleife liegt und mit 
RETURN abgeschlossen wird.

Den Taster auf Masse statt auf 5V zu ziehen hat schon seinen Sinn, außer 
du verwendest einen externen Pulldown, was aber aber dank dem internen 
Pullup nicht nötig ist.

Probiers mal mit folgendem Code und lass den Taster den Pin auf Masse 
ziehen:

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

DDRB = &B11111111
DDRC = &B11101111

Led1 Alias Portb.0
Led2 Alias Portb.1
Led3 Alias Portb.2
Led4 Alias Portb.3
Led5 Alias Portb.4
Led6 Alias Portb.5
Led7 Alias Portc.0
Led8 Alias Portc.1
Led9 Alias Portc.2
Led10 Alias Portc.3

Taster Alias Portc.4
Taster = 1



Do

If Taster = 0 Then
Led10 = 0
End If
Gosub Sub

Loop


Sub:
Led2 = 1
Waitms 40
Led2 = 0
Waitms 40
Return

End


Edit: Diese Antwort bezieht sich auf Post 5.

von Tx (Gast)


Lesenswert?

>
>
> Do
>
> If Taster = 0 Then
> Led10 = 0
> End If
> Gosub Sub
>
> Loop
>
>
> Sub:
> Led2 = 1
> Waitms 40
> Led2 = 0
> Waitms 40
> Return
>
> End



ich wollte aber das ich einmal den taster betätigen muss und das dann 
die leds von alleine weiter blinken?! so quasie als start taster

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die Tasterabfrage (If taster == 1...) ist für einen ACTIVE HIGH 
angeschlossenen Taster gemacht.

Hast du den Taster richtig angeschlossen?

Vergleiche deine Schaltung mit dem rechten Bild in:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Tasten_und_Schalter

Einfacher ist die active low Schaltung, weil man den internen Pull-Up 
Widerstand des AVRs benutzen kann. Das hatten wir gestern in deiner 
anderen Frage.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> ich wollte aber das ich einmal den taster betätigen muss und das dann
> die leds von alleine weiter blinken?! so quasie als start taster

Leg dir einen Merker an und werte dann den Taster oder den Merker aus.
1
gestartet = 0
2
3
do
4
  If Taster = 1 Or gestartet = 1 Then 'Led Programm starten
5
    gestartet = 1
6
    Led1 = 1
7
'usw...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.