Wie AtMega8 mit Bascom programmieren

OP #1078988
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
Gast #1079038
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...
#1079125
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.
1
Config Timer0 = Timer , Prescale = 1024
2

3
On Timer0 Timer0_isr
4

5
Enable Timer0
6
Enable Interrupts
7

8
Dim Intervall As Integer , Blink_on As Integer
9
Dim Led As Integer , Pin As Integer
10

11
Const False = 0
12
Const True = 1
13

14
Main:
15
Do
16
   If Blink_on = True And Intervall >= 3 Then
17
      Blink_on = False
18
      Intervall = 0
19
   Elseif Blink_on = False And Intervall >= 15 Then
20
      Blink_on = True
21
      Intervall = 0
22
   End If
23

24
   For Led = 1 To 5
25
      Pin = Led - 1
26
      If Ledstate(led) = 2 Then
27
         Porta.pin = Blink_on
28
      End If
29
   Next Led
30
Loop
31

32

33
Timer0_isr:
34
   Intervall = Intervall + 1
35
Return
36

37
End
OP #1079648
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
OP #1079752
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.
#1079766
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
#1079784
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.
OP #1079806
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?
OP #1079840
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
OP #1080115
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

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