| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!

View
 

Reaktivlicht Programmcode Beispiel 2 - Morsecodeausgabe

Page history last edited by upigors 14 years, 5 months ago

Hier der reaktive Blinker mit Ausgabe von Morsezeichen (Beispiel "HAPPY HUNTING")

 

$hwstack = 20                                               'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen

$regfile = "ATtiny13.DAT"

$crystal = 128000                                           'Frequenz des internen Oszillators

 

Config Adc = Single , Prescaler = Auto

Config Portb = &B00001000                                   'Pinb.3 auf 'Ausgang', Rest auf 'Eingang' schalten

Portb = 0                                                   'Ausgänge auf Low setzen

Stop Ac                                                     'Analog-Komparator abschalten, um Strom zu sparen

Wdtcr = &B11010011                                          'Watchdog definieren: 0.125 Sekunden, Interrupt auslösen, kein Reset

Enable Interrupts                                           'Interrupts freigeben

Const Schwelle = 50                                         'je größer der Schwellwert, desto unempfindlicher

Const Tagschwelle = 800                                     'Schwellwert für Schlafmodus

Const Zwangsimpuls = 8                                      'LED-Impuls tagsüber alle X Schlafyklen (á ca. 8 Sekunden)

Dim A As Byte                                               'Variablen definieren

Dim Tagzaehler As Byte

Dim Schlafzaehler As Byte

Dim Ldr As Integer                                          '0 = Dunkel, 1023 = Hell

Dim Alt As Integer

Dim Merker As Integer

Dim Zeichen As String * 1

Do

Reset Watchdog

Powerdown                                                   'prozessor bremsen da sonst lichtänderung nicht erkannt wird

Start Adc                                                   'A/D-Wandler starten

Ldr = Getadc(2)                                             'Helligkeitswert einlesen

Stop Adc                                                    'A/D-Wandler zum Stromsparen wieder stoppen

Merker = Ldr - Alt                                          'Unterschied zwischen letzter und aktueller Messung ermitteln

Alt = Ldr                                                   'letzten LDR-Wert sichern

If Merker > Schwelle Then Gosub Morsen                      'Bei großer Änderung Dunkel->Hell: Blinken

If Ldr > Tagschwelle Then                                   'prüfen ob helligkeit über tagschwelle liegt

   If Tagzaehler < 255 Then                                 'int-variable geht nur bis 255

      Tagzaehler = Tagzaehler + 1

   End If

Else

   Tagzaehler = 0                                           'wenn wieder dunkel tagzähler löschen

End If

If Tagzaehler > 200 Then Gosub Pause                        'wenn mehr als x zyklen hell dann schlafmodus

Loop

Pause:

Wdtcr = &B11110001                                          'Watchdog auf 8 Sekunden stellen

Reset Watchdog

Powerdown

Wdtcr = &B11010011                                          'Watchdog wieder auf 0,125 Sekunden zurückstellen

Return

Morsen:

Restore Daten

Alt = 1023                                                  'Doppelauslösung verhindern

Do

 Read Zeichen

 Wdtcr = &B11010100                                         'Watchdog auf 250ms stellen

 If Zeichen = "*" Then Gosub Kurz

 If Zeichen = "-" Then Gosub Lang

 If Zeichen = " " Then Gosub Leer

 Wdtcr = &B11010011                                         'Watchdog wieder auf 125ms stellen

 If Zeichen = "X" Then Return

 Loop

Kurz:

Portb.3 = 1

Reset Watchdog

Powerdown

Portb.3 = 0

Reset Watchdog

Powerdown

Return

Lang:

Portb.3 = 1

Reset Watchdog

Powerdown

Reset Watchdog

Powerdown

Reset Watchdog

Powerdown

Portb.3 = 0

Reset Watchdog

Powerdown

Return

Leer:

Reset Watchdog

Powerdown

Reset Watchdog

Powerdown

Return

End

Daten:

Data " " , " " , " " ,

Data "*" , "*" , "*" , "*" , " " , " " ,

Data "*" , "-" , " " , " " ,

Data "*" , "-" , "-" , "*" , " " , " " ,

Data "*" , "-" , "-" , "*" , " " , " " ,

Data "-" , "*" , "-" , "-" , " " , " " ,

Data " " , " " , " " , " " ,

Data "*" , "*" , "*" , "*" , " " , " " ,

Data "*" , "*" , "-" , " " , " " ,

Data "-" , "*" , " " , " " ,

Data "-" , " " , " " ,

Data "*" , "*" , " " , " " ,

Data "-" , "*" , " " , " " ,

Data "-" , "-" , "*" , " " ,

Data "X"

Comments (0)

You don't have permission to comment on this page.