Mein erstes Bascom Projekt !!

Status
Für weitere Antworten geschlossen.
Es sind fast immer die gleiche Probleme ( abgesehen von Profis )

Hallo!

Nun ja, jeder fängt halt mal Klein an! ;)

Ist natürlich logisch, dass die interessanten Techniken auch die größten Begehrlichkeiten entwickeln.... aber auch zu Beginn schwieriger sind, als eine LED blinken zu lassen. ;)

Gruß,
Cassio
 
Hi,

Was ist pin und was ist port
...
..
.
für PINx, PORTx und DDRx sind zwei schöne FAQs hier im Forum.
Für die Erklärung der Fuses und der Pin-Namen sind auch zwei FAQs
da.

Eigentlich gibt es sehr viele Informationen im Internet. Das größte Problem
ist immer das die Leute keine Lust haben zu suchen sondern lieber einfach
was in ein Forum schreiben (sowas wie "Hilfe" oder "Es geht ganrix" oder
anderes nichtssagendes) und dann erwarten das sie mundgerechte Lösungen
nur noch runterladen und auf den Atmel packen müssen.

Das zweite Problem ist das die Leute nur 5 Minuten suchen und danach auch
keine Lust mehr haben (danach dann weiter wie oben).

Das dritte Problem sind die falschen Wörter nach denen man sucht. Entweder
wird man dann von Antworten "erschlagen" von denen aber mindestens
95% irgendwelche Shops oder andere Suchmaschinen sind oder man bekommt
überhaupt keine Antworten.

Und wenn die Leute was finden dann sind immer nooch viele dabei die keine
Lust haben mal ne Doku mit 300 Seiten nach dem passenden Teil zu
durchsuchen oder ein englisches Datenblatt zu lesen.

Das sind eigentlich die größten Probleme. Bis jetzt habe ich im Internet
eigentlich immer (sagen wir mal in 99,9% der Fälle) das gefunden was mir
weitergeholfen hat. Es ist auch eine gewisse "Fleißaufgabe".

Wer sich jetzt davon angesprochen fühlt der soll sich den Schuh auch gerne
anziehen :D Von meiner Seite ist das einfach nur ne Feststellung die sich
langsam so herauskristallisiert hat.

Gruß
Dino
 
Hallo!

@Dino

Danke für die Worte. Ist auch meine Feststellung.
Im Netz ist fast alles zu finden der Rest ist Eigeninitiative.
Bin auch nur Hobbyist, und habe vor ca. 1,5 Jahren mit AVR begonnen.
Habe zwar eine elektrotechn. Ausbildung aber mit programmieren noch nie was zu tun gehabt.
Leider liest man sehr soft das Leute die mit µC beginnen, als erstes Projekt
eine Mondraketensteuerung bauen wollen. So was popeliges wie eine blinkende Led ist doch für einen Anfänger zu blöd.

MfG
caargoo
 
Hallo Oldmax!

Du darfst dich gerne als Schöööler neben sulawesi setzen. :D

Bleibt du aber mal lieber bei ASM.....
Wenn ich dann mal eine LIB brauche weiß ich ja, wen ich fragen kann. ;)

Gruß,
Cassio

Hi
Also, ich freu mich, das du mich so freundlich einladen tust. :) Werd auch vielleicht drauf zurückkommen, zu gegebener Zeit:D
Und wenn ich helfen kann, gern. Übrigends, Wie hättet ihr gern den kleinen Assembler-Kurs ? Sind bisher über 40 Seiten. Muß das ganze jetzt noch von den Beispielprogrammen testen und denke, nächste Woche gibt's dann was zu lesen. Soll ich 2 Threads öffnen, eine mit dem Text und eine als Diskussion oder soll ich es als Word komprimieren und ihr baut es dann irgendwo ein. Gruß oldmax
 
Hi!

Ja ja.... mit zunehmenden Alter ist man auch nicht mehr so multitaskingfähig. ;)

Es gibt ja Personen die meinen, Männer wären das überhaupt nicht. :eek:
Ich bin eher der Meinung, ein Mann sollte nicht alles offenlegen was er wirklich kann. :D

OK.... bis später!

Cassio

Wie recht du hast... ich hab mal vor zig Jahren meiner Frau geholfen und die Bügelwäsche erledigt..... :flowers: ratet mal, wer nun die Vorteile einer neuen Bügelstation nutzen darf.. :) und ich durfte sie mir auch aussuchen.:D
Gottseidank hat das mit dem Kochen nicht so funktioniert....:stupido3:
Gruß oldmax
 
Diese Lösung gefällt mir sehr gut..Klasse ( langweilig für Euch ;) So ist es für einen Anfäger verständlich..hoffe ich

Code:
Do

If Lcd_flag = 1 Then                                        ' Wenn Flag ist 1 dann "und"
   If Zaehler2 < 59 Then                                    ' Der Zähler kleiner ist 59
      Incr Zaehler2                                         'dann hochzählen
      Gosub Anzeige                                         'Zu Anzeige  Sub
   Else                                                     'ansonsten wenn die beiden nicht erfüllt sind
      Zaehler2 = 0                                          'Zähler auf 0
      Locate 2 , 12                                         'Variable setzen
      Lcd Zaehler2 ; " "
   End If
Else
End If

Loop
 
Diese Lösung gefällt mir sehr gut..Klasse

Hi sulawesi!

Kann ich mir fast nicht vorstellen, dass dir die Lösung gefällt.
Ich habe nämlich einen kleinen Fehler eingebaut. ;)

Ist dir nichts aufgefallen, oder hast du es gar nicht mehr ausprobiert....

Schau mal hier :)
sulawesi-LCD.jpg


Gruß,
Cassio
 
Hi!

Nun ja, ich will mal nicht so sein.... ;)

Hier dann der schlussendliche Code für unsere Übung.
Vielleicht entdeckst du ja die Kleinigkeit noch, die geändert werden musste. :)



CodeBox bascom

'Sulawesi, Übungsprogramm Nr.2

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

$hwstack = 32
$swstack = 10
$framesize = 40



Dim Zaehler1 As Byte
Dim Zaehler2 As Byte
Dim Lcd_flag As Bit


Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2

Cls
Cursor Off


Config Timer1 = Timer , Prescale = 256
On Timer1 Timer_isr
Enable Timer1
Timer1 = 3036
Enable Interrupts


'Fixtext für LCD
Locate 1 , 1
Lcd "Zaehler1 = "
Locate 2 , 1
Lcd "Zaehler2 = "


'--------------------------------------------------------------
Do

If Lcd_flag = 1 Then
If Zaehler2 < 59 Then 'Wenn beide
Incr Zaehler2 'Erhöhe Zähler2
Gosub Anzeige
Else 'sonst
Zaehler2 = 0 'auf Null setzen
Locate 2 , 12 'Display an der Stelle mit 2 Space
Lcd Zaehler2 ; " " 'Null anzeigen und eine Stelle dahinter löschen
Gosub Anzeige
End If 'LCD Sub gehen
Else
End If

Loop 'wiederholen



'--------------------------------------------------------------
Timer_isr:
Stop Timer1 'Timer anhalten

Lcd_flag = 1 'Wenn erfüllt

If Zaehler1 < 59 Then 'Wenn beide
Incr Zaehler1 'Erhöhe Zähler1
Else 'sonst
Zaehler1 = 0 'auf Null setzen
Locate 1 , 12 'Display an der Stelle mit 2 Space
Lcd Zaehler1 ; " " 'Null anzeigen und eine Stelle dahinter löschen
End If

Timer1 = 3036
Start Timer1 'Starten

Return 'Zurück


'--------------------------------------------------------------
Anzeige:
Locate 1 , 12 'Pos
Lcd Zaehler1 'Var

Locate 2 , 12 'Pos
Lcd Zaehler2 'Var

Lcd_flag = 0 'Flag auf 0
Return 'zurück

End



Gruß,
Cassio
 
Hi oldmax,

Soll ich 2 Threads öffnen, eine mit dem Text und eine als Diskussion oder soll ich es als Word komprimieren und ihr baut es dann irgendwo ein.
neee .... Word ist :bawling:
Ich mach beispielsweise einfach nen Thread auf, mach dann schon mal so viele Antworten
mit mindestens 10 Zeichen drin auf, wie ich meine das ich brauche. Und dann
werden die einzelnen Antworten geändert (der Text reingefüllt).
Das geht recht gut.

Und wenn es erst vollständig drinn sein soll dann setz doch in deine letzte
Antwort einfach ne Info rein das die Leute mit der Diskussion noch etwas
warten sollen.

In 2 Thread auseinanderhacken wird bei der Diskussion dann etwas konfus.

Gruß
Dino
 
Hi
@Dino03
Sorry, das ich diesen Thread mißbrauche, ist auch (hoffentlich ) das letzte mal, ich hab da ein paar Skizzen drin, um etwas anschaulich darzustellen. Mal sehen, ob ich das so in die Posts reinkriege. Sonst hab ich ein Problem.
Gruß oldmax
 
Hi,

Hallo!

@Dino

Danke für die Worte. Ist auch meine Feststellung.
Im Netz ist fast alles zu finden der Rest ist Eigeninitiative...
...Leider liest man sehr soft das Leute die mit µC beginnen, als erstes Projekt
eine Mondraketensteuerung bauen wollen. So was popeliges wie eine blinkende Led ist doch für einen Anfänger zu blöd.

Eigentlich überflüssig, das noch zu kommentieren, aber Ihr habt natürlich recht. Ich wollte mit Start in die AVR- Welts sofort mit der Rennbahn- Steuerung beginnen. Ich habe jedoch schnell gemerkt, dass es ohne die nötigen Grundlagen nichts wird.

Also. immer schön der Reihe nach, Geduld haben und - viel lesen. Dass ich nun leider etwas hinterher hinke, hat jedoch andere Gründe.


Grüsse,

Michael
 
Nun eine bereinigte Version...bin mal gespannt was jetzt alles kommt :confused: :eek:

Code:
$regfile = "m8def.dat"
   $crystal = 16000000
   $hwstack = 100
   $swstack = 100
   $framesize = 100
   Dim Sekunde As Byte                                      'Uhrzeit - Sekunde
   Dim Minute As Byte                                       'Uhrzeit Minute
   Dim Stunde As Byte                                       'Uhrzeit Stunde
   Dim Asekunde As Byte                                     'Alarm Sekunden
   Dim Aminute As Byte                                      'Alarm Minute
   Dim Astunde As Byte                                      'Alarm Minute
   Dim Alarm_flag As Bit                                  'Alarm an oder aus

   Dim Lcd_sekunde As String * 2                            'Ausgabe Sekunden
   Dim Lcd_minute As String * 2                             'Ausgabe Minuten
   Dim Lcd_stunde As String * 2                             'Ausgabe Sekunden


   Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
      Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
   Config Lcd = 16 * 2
   Cls
   Cursor Off

   '-----------------------------------------------

   'Taster0 Umschalter ,nicht gedrückt Uhr,gedrückt Alarm
   Config Pind.2 = Input
   Portd.2 = 0
   Taster0 Alias Pind.2

   'Taster1 Uhr stellen
   Config Pind.3 = Input
   Portd.3 = 0
   Taster1 Alias Pind.3

   'Taster2 Minuten stellen
   Config Pind.4 = Input
   Portd.4 = 0
   Taster2 Alias Pind.4

   'LED definieren
   Config Portd.5 = Output
   Led Alias Portd.5

   'Buzzer Port
   Config Portd.7 = Output
   Speaker Alias Portd.7

   '-----------------------------------------------

   Config Timer1 = Timer , Prescale = 256
   Enable Timer1
   On Timer1 Takt
   Enable Interrupts
   Timer1 = 3036

   Sekunde = 0
   Minute = 0
   Stunde = 0
  '-----------------------------------------------


Do


'Umschalter zwischen Uhr und Alarm

If Taster0 = 0 Then
   Waitms 50
   Gosub Uhr
   Elseif Taster0 = 1 Then
   Waitms 50
   Gosub Alarm
End If


'Alarm auslösen

If Minute = Aminute Then                                    'Vergleich Minuten
   If Stunde = Astunde Then                                 'Vergleich Stunden
      Alarm_flag = 1                                        'Alarm aktiv
   End If
End If



If Alarm_flag = 1 Then
  Led = 1
  Wait 1
  Led = 0
  Wait 1
  Led = 1
   Sound Speaker , 50 , 1000                                'Länge Tonhöhe
   Wait 1
   Sound Speaker , 50 , 1000
   Wait 1
   Sound Speaker , 50 , 1000
   Wait 1
   Sound Speaker , 50 , 1000
   Wait 1
   Sound Speaker , 50 , 1000
   Wait 1
   Sound Speaker , 50 , 1000
   Wait 1
   Sound Speaker , 100 , 1500
   Sound Speaker , 100 , 1000
   Sound Speaker , 100 , 1500
   Wait 1
   Led = 0
   Alarm_Flag=0
End If

Loop

End

'Submenu Timer
Takt:
Incr Sekunde
Timer1 = 3036
Return

'Submenu Zeit

'----------- Anzeige Stunden , Minuten, Sekunden auf Display ------------------

Uhr:
Lcd_stunde = Str(stunde)
Lcd_stunde = Format(lcd_stunde , "00")
'----------------------------------
Lcd_minute = Str(minute)
Lcd_minute = Format(lcd_minute , "00")
'------------------------------------
Lcd_sekunde = Str(sekunde)
Lcd_sekunde = Format(lcd_sekunde , "00")

Locate 2 , 13
Lcd Lcd_sekunde
Locate 2 , 11
Lcd ":"
Locate 2 , 8
Lcd Lcd_minute
Locate 2 , 6
Lcd ":"
Locate 2 , 3
Lcd Lcd_stunde
Locate 1 , 1
Lcd "Aktuelle Uhrzeit"
Waitms 50

If Taster1 = 1 Then                                         'Uhr einstellen Minute
   Waitms 50
   Incr Minute
End If

If Taster2 = 1 Then                                         'Uhr einstellen Stunde
   Waitms 50
   Incr Stunde
End If

 If Sekunde > 59 Then Minute = Minute + 1
 If Sekunde > 59 Then Sekunde = 0
 If Minute > 59 Then Stunde = Stunde + 1
 If Minute > 59 Then Minute = 0
 If Stunde > 23 Then Stunde = 0

Return

'Submenu Alarm
Alarm:
Locate 1 , 1
Lcd " Aktuelle Alarm "
LCD_Stunde = Str(astunde)
Lcd_stunde = Format(lcd_stunde , "00")
'----------------------------------
LCD_Minute = Str(aminute)
Lcd_minute = Format(lcd_minute , "00")
'------------------------------------
LCD_sekunde = Str(asekunde)
Lcd_sekunde = Format(lcd_sekunde , "00")
'--------------------------------------

Locate 2 , 13
Lcd Lcd_sekunde
Locate 2 , 11
Lcd ":"
Locate 2 , 8
Lcd Lcd_minute
Locate 2 , 6
Lcd ":"
Locate 2 , 3
Lcd Lcd_stunde
Locate 1 , 1
Cursor Off Noblink
Waitms 50

If Asekunde > 59 Then Aminute = Aminute + 1
 If Asekunde > 59 Then Asekunde = 0
 If Aminute > 59 Then Astunde = Astunde + 1
 If Aminute > 59 Then Aminute = 0
 If Astunde > 23 Then Astunde = 0


'--------------Alarm einstellen Stunde -----------------------------------------
 If Taster1 = 1 Then
   Waitms 50
   Incr Astunde
 End If
 '--------------Alarm einstellen Stunde -----------------------------------------
If Taster2 = 1 Then
   Waitms 50
   Incr Aminute
End If


Return
 
Nun eine bereinigte Version...bin mal gespannt was jetzt alles kommt :confused: :eek:

Hi!

Du denkst aber auch nur schlechtes von uns, oder? ;) :D

Hast du dein Programm schon in den Mega geschoben?
Wenn alles funktioniert, ist das doch ein Erfolg. :)

Über die Art und Weise des Programmablaufes, oder den Programmierstiel zu schreiben, wäre Unsinn.....
Jeder fängt halt mal an. ;)

Hauptsache, es funzt. :D

Gruß,
Cassio
 
Projekt abgeschlossen

Ich denke dieses Projekt, basierend auf dem Pollin Board ist soweit abgeschlossen.

Die Erweiterungen, die ich noch einbauen wollte, gestallten sich schwierig, zum Abbruch des Alarms wäre noch ein Taster notwendig, welcher das Board nicht hat.

Ich werde den Code dann entsprechend noch umschreiben und die Tastersignale wie standard setzen ( aktiv Low )

Noch etwas, wenn die Uhr eingeschaltet wird, wird die Anzeige auf 00:00:00 gesetzt, deshalb ertönt auch Alarm.

Nach Einstellung der Uhrzeit funktioniert dann alles soweit gut, oder bisher habe ich noch keine Unregelmässigkeiten feststellen können.
 
Hallo sulawesi!

Du kannst natürlich nach dem Einstellen des Alarms die Werte auch in das EEprom des ATMega schreiben.

Der Vorteil ist, dass die dort gespeicherten Werte auch bei Stromausfall erhalten bleiben. ;)
So würde er nach einem Stromausfall keinen Alarm geben!

Der Nachteil wäre dann, dass du zur falschen Zeit geweckt wirst!
Aber.......... irgendwas ist ja immer. ;)


Bevor die Frage kommt wie man Daten ins EEprom schreibt, hier ein Beispiel:
Code:
' Bestimme die EEprom-Variablen
Dim E_wecker_std As Eram Byte
Dim E_wecker_min As Eram Byte

Später musst du im Programm nur noch die Werte "kopieren":
Code:
E_wecker_std = Astunde
E_wecker_min = Aminute

Wichtig !
Das EEprom kann man nur begrenzt überschreiben! Irgendwann ist Schluss!
Du musst dir also genau überlegen WO du im Programm Werte ins EEprom kopierst.
In deinem Fall würde ich es nur dann machen, wenn du die Alarmzeit eingestellt hast.
Auf alle Fälle musst du sicherstellen, dass im normalen Betrieb nicht permanent Daten ins EEprom geschrieben werden, sonst hat sich das Thema bald erledigt. ;)

Um die Werte nun wieder in dein Programm zurück zu holen, musst du VOR dem Beginn der Hauptschleife EINMAL die Daten aus den EEprom-Variablen deine Programm-Variablen kopieren.
Also so:
Code:
Astunde = E_wecker_std
Aminute = E_wecker_min

Das ist alles!
Und schon vergisst dein Wecker die Alarmzeit nicht mehr. :)

Gruß,
Cassio
 
Ist mal wieder ein guter Tipp, aber für dieses Projekt, lohnt sich nicht.
Hier war für mich wichtig, zu erlernen wie es funktioniert. Es wird irgendwannmal ein Projekt geben wie vom Cassio ....
 
Würde sowas funktionieren ? ( bevor ich flashe ? )

Idee....

wenn der Taster0 kurz gedrück wird, soll der Timer starten

Code:
Do
...............
Debounce Taster0 , 0 , Start_timer, Sub                     ' Taster gegen GND dann Sub
...............
Loop

'SUB Takt
Takt:
If Timer_flag = 1 Then
Incr Sekunde
Timer1 = 3036
End If
Return

'SUB Taster
Start_timer:
Timer_flag = 1
Return
 
Status
Für weitere Antworten geschlossen.

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)