www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie AtMega8 mit Bascom programmieren


Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin auch langsam am verzweifeln! Bin absoluter Anfänger!!

Ich muss für jemanden etwas bauen. Dies besteht aus 9 LED, die mit einem 
Taster jeweils wagrecht oder Diagonal leuchten sollen. Und wenn kein 
Taster gedrückt, sollen alle Blinklen.

Bin jetzt so weit, dass ich die LED über den Atmega8 einschalten kann. 
Weder Blinklich noch Taster funktionieren.

Das Flashen des Atmega8 klappt, nur ich weiß nicht wie ich das 
Programmieren soll.

Kann mir jemand Helfen?

Mit freundlichen Grüßen
Stefan

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Blinken über Interrupt und Timer realisieren, Abfrage der Taster mittels 
DEBOUNCE...

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du mir ein Beispiel geben wie ich das programmieren soll?

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird aber etwas später. Essen, Kind ins Bett, ...

Autor: Stefan Meyer sein Kumpel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dom. mach aber hin die Hausaufagbe muss morgen fertig sein !!!

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will das möglichst noch heute zumindest anfangen.

Autor: Der Papa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, der "jemand" ist ein Lehrer - und - wie bei meinen Herren Söhnen 
auch so oft - wird die Hausaufgabe mal wieder "in letzter Minute" 
begonnen.

So eine Aufgabe erfordert aber schon ein wenig "Einarbeitung" - bis 
morgen wird das sicher nix mehr...

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab meine Hausaufgaben längst gemacht.

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Meyer wrote:
> Ich will [...].

Meinem Sohn (5) hab ich "ich möchte" beigebracht... aber nungut. Wie 
darf ich mir "diagonal oder horizontal leuchten" vorstellen? Wie sind 
die LEDs angeordnet? Zeichnung?

Gruß
Dominique Görsch

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier schonmal aus meiner Snippetsammlung was, womit ich blinke... 
aktuell für 5 LEDs A0-A4 vorgesehen, muss man für 9 dann noch ein bissl 
aufbohren, aber das schaffste sicher selber. Für mehr Hilfe brauch ich 
mehr Infos.
Config Timer0 = Timer , Prescale = 1024

On Timer0 Timer0_isr

Enable Timer0
Enable Interrupts

Dim Intervall As Integer , Blink_on As Integer
Dim Led As Integer , Pin As Integer

Const False = 0
Const True = 1

Main:
Do
   If Blink_on = True And Intervall >= 3 Then
      Blink_on = False
      Intervall = 0
   Elseif Blink_on = False And Intervall >= 15 Then
      Blink_on = True
      Intervall = 0
   End If

   For Led = 1 To 5
      Pin = Led - 1
      If Ledstate(led) = 2 Then
         Porta.pin = Blink_on
      End If
   Next Led
Loop


Timer0_isr:
   Intervall = Intervall + 1
Return

End

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die LED werden wie ein Quadrat angeordnet also 3Led's in der 1. reihe, 
3LED's in der 2. Reihe, 3LED's in der 3 Reihe.

Diagonal = von links bis rechts oben.

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe oben, da haste schonmal ne ganze Menge... das Debounce muss halt 
noch in die Main-Loop. Debounce ist in der BASCOM-Hilfe ganz gut 
erklärt. Konkrete Fragen beantworte ich aber auch gern.

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Meldet irgent wie so 3 errors. Aber so richtig blicke ich das noch 
nicht!

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Meyer wrote:
> Der Meldet irgent wie so 3 errors.
Etwas präziser wäre nicht schlecht.

> Aber so richtig blicke ich das noch nicht!
Was genau?

Gruß
Dominique Görsch

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was hat der Lehrer zu der nicht Lösung gesagt?
Oder hast Du heute krank gemacht?

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. ist das nicht für die Schule - sondern privat gebrauch!!!
2. Kann ich das ganze auch so machen:

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

Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output

Do
Portd. 2 = 1
Waitms 100
Portd. 2 = 0
Waitms 100

Portd. 3 = 1
Waitms 100
Portd. 3 = 0
Waitms 100

Portd. 4 = 1
Waitms 100
Portd. 4 = 0
Waitms 100

Portd. 5 = 1
Waitms 100
Portd. 5 = 0
Waitms 100

Portd. 6 = 1
Waitms 100
Portd. 6 = 0
Waitms 100

Portd. 7 = 1
Waitms 100
Portd. 7 = 0
Waitms 100

Portb. 0 = 1
Waitms 100
Portb. 0 = 0
Waitms 100

Portb. 1 = 1
Waitms 100
Portb. 1 = 0
Waitms 100

Portb. 2 = 1
Waitms 100
Portb. 2 = 0
Waitms 100
Loop

Und halt noch "irgendwie" die Taster danach setzten? Möglichst einfach, 
mit möglichst wenigen schritten.

Die Geschwindigkeit gefällt mir so, nur das ,was  Dominique Görsch 
gepostet hat weis ich nicht, wie ich die Led's den Port bestimme, bzw 
wie ich es erweitern oder bearbeiten kann.

Mit freundlichen Grüßen
Stefan

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal das ganze Bascom File damit mann etwas sieht.

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ganzes Bascom File?

Was ich gerade gepostet habe, ist dass was ich mir gestern "angeeignet" 
habe. Also, dass weiß ich wie es funktioniert.

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mehr wie das oben hast Du noch nicht als Code?

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig, deswegen such ich ja ne Lösung, mit der ich dann noch die 
Taster einbinden kann. Suche schon 2 Stunden im Internet nach 
möglichkeiten.

Möchte ja so was wie Programmteile mache - weiß aber nicht wie das geht.

Unter Programmteile meine ich, dass wenn ich z.b. Taster 1 Drücke eine 
bestimmte Aktion ausgeführt wird, die wenn ich dann los lasse, wie 
aufhört und das Blinken wieder anfängt.

Autor: Klaus R. (klaus2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"state machine", Herr Lehrer!

Klaus.

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if taster1 == 0 then gosub test1



test1

   mach irgend was

return

so in etwa?

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, du willst dass die LEDs der Reihe nach blinken, dann schreib das 
doch auch.
> Und wenn kein Taster gedrückt, sollen alle Blinklen.
Oben schrubst du nämlich, dass alle blinken sollen...

Ich rate dir dennoch, statt mit Waitms das mit 'nem Timer zu machen, 
auch wenn du es auch so hinbekommst. Für die Taster hab ich dir schon 
mehrfach den Tipp zu Debounce gegeben. Die BASCOM-Hilfe enthält 
Beispiele dafür!

Gruß
Dominique Görsch

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine neue Frage, würde dass mit sub Funktionieren bzw mit 5 Tastern?

Wie müsste ich das in den oben Geposteten Code intergrieren?

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Meyer wrote:
> würde dass mit sub Funktionieren bzw mit 5 Tastern?
Ich denk 2 Taster?

> Wie müsste ich das in den oben Geposteten Code intergrieren?
Eine Tastenabfrage (ohne Interrupts) macht in deinem Code keinen Sinn, 
weil die Schleife viel zu lange braucht, bis sie durchlaufen ist.

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigung, wenn ich mich unklar ausgedrückt habe.

Möchte es mit ca. 5 Tastern machen, 1 für unterste led reihe, 2. Taster 
zweite reihe, 3. Taster 3. reihe Led's. 4. Taster Diagonale links unten 
nach rechts oben, 5. Taster von rechts unten nach links oben.

Mir ist auch egal ob ohne Taster druck alle gleichzeitig Blinken oder 
der Reihenach, wie oben.

Wie das mit Main-Loop oder Debounce funktionieren soll, weiß ich nicht 
NOCH nicht.

Wie müsste ich die Subs eigentlich markieren, bzw. einbinden?

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mach ich hier Falsch?

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

Config Portc.3 = Input
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output

Declare Sub Unterprogramm


Do
Portd. 2 = 1
Waitms 150
Portd. 2 = 0
Waitms 150

Portd. 3 = 1
Waitms 150
Portd. 3 = 0
Waitms 150

Portd. 4 = 1
Waitms 150
Portd. 4 = 0
Waitms 150

Portd. 5 = 1
Waitms 150
Portd. 5 = 0
Waitms 150

Portd. 6 = 1
Waitms 150
Portd. 6 = 0
Waitms 150

Portd. 7 = 1
Waitms 150
Portd. 7 = 0
Waitms 150

Portb. 0 = 1
Waitms 150
Portb. 0 = 0
Waitms 150

Portb. 1 = 1
Waitms 150
Portb. 1 = 0
Waitms 150

Portb. 2 = 1
Waitms 150
Portb. 2 = 0
Waitms 150
Loop





If Pinc.3 = 1 Then Gosub 1

Do

Loop


Sub Unterprogramm
Portc.5 = 1

End Sub

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein If Pinc.3 = 1 Then Gosub 1 wird nie erreicht, da der Controller die 
Schleife darüber abarbeitet.

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich das übverarbeiten irgentwie abstellen?

Wie muss ich das programmieren, das die 9LED's an verschiedenen 
Ausgängen gleichzeitig blinken?

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Portd = 252 // LEDs aus
Portd = 0   // LEDs ein

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Portd = 252 // LEDs aus
Portd = 0   // LEDs ein
Portb = 3   // LEDs aus
Portb = 0   // LEDs ein

Autor: bauteiltöter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich schlage dir vor, den BASCOM-Kurs auf www.halvar.at GRÜNDLICH 
durchzulesen!
Dort stehen sehr viele interessante funktionen.

MfG Bauteiltöter

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich das bei dem BASCOM-Kurs richtig verstanden habe, kann ich das 
mit dem AtMega8 gar nicht machen, da der nur 2 Ports hat, die als 
interrupt Port nutzen kann.

Ist das richtig?

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt da noch den PinChangeInterrupt.
Da kannst Du jedem Pin einen Int. zuordnen.

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Halte deine Main-Loop kurz genug, schau das keine Waits drin sind, dann 
brauchst du für die Taster keine Interrupt.

Autor: Stefan Meyer (likevista)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde das als Mainloop funktionieren?

Config Timer1 = Timer, Prescale = 8

Config Pinc.2 = Output
Config Pind.2 = Output
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Led1 Alias Portc.2

'Hier wird das Unterprogramm festgelegt, das
'in dem von ihnen eingestellten Intervall aufgerufen wird
On Timer1 Timer_irq
Const Timervorgabe = 23869

Enable Timer1
Enable Interrupts

'Hier ist die Programmhauptschleife
Do
'Hier könnte Ihr Hauptprogramm stehen
Loop

Timer_irq:
  Timer1 = Timervorgabe

   Toggle Led1
   Toggle Portd.2
   Toggle Portd.3
   Toggle Portd.4
   Toggle Portd.5
   Toggle Portd.6
   Toggle Portd.7
   Toggle Portb.0
   Toggle Portb.1
   Toggle Portb.2
   Return

Wie und wo müsste ich jetzt die Taster reinschreiben?

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.