-
        

Ergebnis 1 bis 6 von 6

Thema: Softwareroutine

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2010
    Ort
    Neuss
    Alter
    34
    Beiträge
    15

    Softwareroutine

    Anzeige

    Hallo alle zusammen,

    ich möchte ein kleines programm schreiben was als ahuptprogramm nichts weiter macht als auf eine Eingabe warten. Diese Eingabe soll entweder per RS232 oder durch drücken eines Tasters der an einem pin angeschlossen wird erfolgen. Der jeweilige befehl soll dann einfach nur eine weuitere subroutine aufrufen. sollte 1 std. kein befehl gekommen sein soll eine bestimmte routine aufgerufen werden. und dann das selbe nochmal...

    wie löse ich das am besten?

    PS: ich arbeite mit bascom

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Wulferstedt
    Beiträge
    1.042
    Eine Frage vorweg. Soll der AVR noch andere Funktionen
    während des Waertens auf die Eingabe erfüllen? VG Micha

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2010
    Ort
    Neuss
    Alter
    34
    Beiträge
    15
    ne eigentlich nicht....
    das ganze geht darum den ladezustand von 2 accus zu überwachen die werte per RS 232 Auszugeben und ggf. den einen oder den anderen accu zu laden.

    es soll eine manuelle abfrage per rs 232 möglich sein und ein manuelles umschalten auf laden per RS232 und per taster.

    sollte diese anfrage nicht kommen so soll 1 mal pro stunde automatisch die spannung geprüft werden und entschieden werden ob geladen werden muss oder nicht....

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Wulferstedt
    Beiträge
    1.042
    Dann wirst Du um Timer- und Interruptprogrammierung nicht
    drumrumkommen. VG Micha

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    23.10.2010
    Beiträge
    43
    Hi,
    wie genau soll die Zeit den sein?

    Hier mal ein Beispiel

    Code:
    $regfile = "M168Pdef.dat"                                   'es handelt sich um einen ATmega168P
    $crystal = 3686400                                          'der eingebauter RC-Oszillator läuft mit 3,6864 Mhz
    $hwstack = 100                                              'im Speicher werden für den Hardware-Stack 100 Byte reserviert
    $swstack = 100                                              'im Speicher werden für den Software-Stack 100 Byte reserviert
    $framesize = 100                                            'im Speicher werden für den Frame 100 Byte reserviert
    $baud = 19200
    
    
    S1 Alias Pind.2                                             'Schalter 1 an Port D2 (Taster)
    Config S1 = Input                                           ' als eingang festlegen
    Pind.2 = 1                                                  'Pullup einschalten
    
    
    'Timer einstellen
    'Frequenz-Teiler 1,8,64,256 or 1024
    Config Timer1 = Timer , Prescale = 1024
    '3686400 / 1024 = 3600 impulse/sek
    
    
    'Variable festlegen
    Dim Sekunde As Byte , Minute As Byte
    Sekunde = 0
    Minute = 0
    
    
    'Unterprogramme Declarieren
    Declare Sub Prog1                                           'Unterprog. 1
    Declare Sub Prog2                                           'Unterprog. 2
    
    
    Do
    
       If S1 = 0 Then                                           'Wenn S1 gedrückt
          Call Prog1                                            'und Unterprog. 1 Starten
       End If
    
    
       If Timer1 >= 3600 Then
          Incr Sekunde                                          'Sekunden werden gezählt bis 60
          Print "Sekunden: " ; Sekunde
          Timer1 = 0
       End If
    
    
       If Sekunde >= 60 Then
          Incr Minute
          Print "Minuten: " ; Minute                            'Minuten Zähler, Sekunden auf 0 setzen
          Sekunde = 0
       End If
    
    
       If Minute >= 60 Then                                     'Bei 60 Minuten, Unterprog 2 starten und Minuten auf = setzen
          Minute = 0
          Call Prog2
       End If
    
    Loop
    
    
    
    End
    
    
    
    Sub Prog1                                                   'Unterprog. 1
    
       Bitwait S1 , Set                                         'warten bis Taster S1 losgelassen wird
    
       Print
       Print "Taster S1 wurde gedrueckt"
       Print
    
       Sekunde = 0                                              'Zeit auf 0 setzen
       Minute = 0
    
    End Sub
    
    
    
    Sub Prog2                                                   'Unterprog. 2
    
       Print
       Print "Prog2 gestartet"
       Print
    
       Sekunde = 0                                              'Zeit auf 0 setzen
       Minute = 0
    
    End Sub
    Timer 1 läuft und zählt sekunden hoch, diese zählen minuten hoch bis Taster 1 gedrückt wird oder 60 Minuten gezählt sind.

    Bei Taster startet Prog1 und Zeit wird wieder auf 0 gestellt
    Bei 60 min startet Prog2 und Zeit wird wieder auf 0 gestellt

    ACHTUNG: Quarz richtig einstellen!!! und Timer anpassen falls andere Quarz verwendet wird

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Wulferstedt
    Beiträge
    1.042
    Sehr gut: Quarzstabilisiert mit Baudratenquarz.
    Mit dieser Hardware dürfte nix schiefgehen. VG Micha
    Was brauche ich für Werkzeug - in dieser Reihenfolge seht ihr es:
    Vorschlaghammer, Notebook, BASCOM, Lötequipment, Rohrzange, Bolzenschneider ...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •