Starten eines Programmes Atmega8

Gast #1924205
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
#1924291
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.
Gast #1924312
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
Gast #1924328
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.
#1924336
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.
Gast #1924358
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
Persönliche Seite #1924359
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren