mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Starten eines Programmes Atmega8


Autor: Tx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.....

Autor: Samuel C. (dragonsam)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Skua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$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
                                     'Led Programm
    Led1 = 1
    Waitms 50
    Led1 = 0
    Waitms 50

    Led2 = 1
    Waitms 50
    Led2 = 0
    Waitms 50

    Led3 = 1
    Waitms 50
    Led2 = 0
  End If
Loop


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.

Autor: Tx (Gast)
Datum:

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

Autor: Samuel C. (dragonsam)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...

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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.
gestartet = 0

do
  If Taster = 1 Or gestartet = 1 Then 'Led Programm starten
    gestartet = 1
    Led1 = 1
'usw...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.