Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Reaktives Licht mit Atmel AVR

Basteleien analog und digital mit Strom und Spannung.

Moderator: radioscout

conrad
Geocacher
Beiträge: 74
Registriert: So 16. Dez 2007, 09:03
Wohnort: BS

Beitrag von conrad » Do 3. Jan 2008, 14:04

hat wirklich keiner der Programmierer hier ne Idee? Habb nun wirklich den ganzen Tag getestet, bis hin zum aufhängen der schaltung nach dem 1. auslösen. Hat alles nix gebracht. Die Schaltung tut es, mal mehr mal weniger aber nie richtig. Verstehe halt die Verkettung nicht..... Das kann doch nicht so schwer sein.... Egal welches Zeichen, welche Länge ect, einfach Gosub Morsen....... aber es geht nicht :evil: :evil: :evil: :evil:

Werbung:
ksbender
Geocacher
Beiträge: 76
Registriert: Do 15. Nov 2007, 23:26
Wohnort: Parsau - Niedersachsen

Beitrag von ksbender » Do 3. Jan 2008, 23:38

conrad hat geschrieben:Morgen, ich komm mal zurück zum Ursprung, der Schaltung mit LDR. Hab mich nun doch entschieden selber zu basteln, was bisher auch prima geklappt hat. Habe verschiedene Programme aufgespielt, zu letzt das Morse-Prog. Jedoch gelingt es mir nicht die gespeicherte Ausgabe zu aktivieren. Bei vielleicht 50 Versuchen 1x. conrad
Ich habe auch mit einer Morsecode-Eingabe bei der LDR Schaltung herumprobiert. Aber wie auf Seite 77 dieses Threads steht, ist der LDR nicht so fix! Darum kann es eigentlich nicht klappen.
Darum habe ich mir jetzt auch mal ein paar BPW40´s bestellt. Wenn die kommen probiere ich weiter.
Ein anderes Problem bei mir war, daß das reine "zusammenwürfeln" der verschiedenen Programmteile zu viel Speicherplatz belegte. Da muß ich nochmal ran.
Melde mich wieder wenn´s geklappt hat.
Gruß aus Portugal
Stephan
Cache gefunden, Füße stinken, höchste Zeit, ein Bier zu trinken.

Benutzeravatar
Windi
Geoguru
Beiträge: 6338
Registriert: Fr 16. Jan 2004, 23:57
Kontaktdaten:

Beitrag von Windi » Fr 4. Jan 2008, 01:11

conrad hat geschrieben:hat wirklich keiner der Programmierer hier ne Idee? Habb nun wirklich den ganzen Tag getestet, bis hin zum aufhängen der schaltung nach dem 1. auslösen. Hat alles nix gebracht. Die Schaltung tut es, mal mehr mal weniger aber nie richtig. Verstehe halt die Verkettung nicht..... Das kann doch nicht so schwer sein.... Egal welches Zeichen, welche Länge ect, einfach Gosub Morsen....... aber es geht nicht :evil: :evil: :evil: :evil:
Bitteschön. Ich hab mal schnell aus meinem Dauermorser und dem Reaktivlicht einen Reaktivmorser zusammengestrickt.
Nach dem Anleuchten wird der gespeicherte Morsecode ausgegeben.
Der Morsecode muss als "dit *" bzw. "dah -" unten im Programm in die Data-Zeilen eingefügt werden. Nach jedem Zeichen muss ein " " Leerzeichen für die korrekte Pause eingefügt werden.

Code: Alles auswählen

'============================================================
'
' ********************************************************
' ***                                                  ***
' ***    Tiny-Reaktivlicht mit LDR und A/D-Wandler     ***
' *** mit Watchdog-Energiesparmodus und Tagabschaltung ***
' *** Ausgabe von Morsesignalen beim Anleuchten        ***
' ***                                                  ***
' ***      erstellt von Windi für www.geoclub.de       ***
' ***                   04.01.2008                     ***
' ***                                                  ***
' ********************************************************
'
' µC: ATtiny13V
' +Ub: 3,00 V
' I: 17 µA im Leerlauf (Nachtbetrieb)
' I: 5 µA bei Tagabschaltung
' Reichweite: 650 m mit Maglite 5D
'
'============================================================

$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
Schlafzaehler = Schlafzaehler + 1                           'merken wie oft Schlafmodus durchlaufen wurde
If Schlafzaehler = Zwangsimpuls Then                        'als Funktionskontrolle tagsüber LED auslösen
   Portb.3 = 1
   Reset Watchdog
   Powerdown
   Portb.3 = 0
   Schlafzaehler = 0
End If
Return

Morsen:
Restore Daten                                               'Am Beginn der Daten anfangen
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 "*" , "-" , " "                                        'A
Data "-" , "-" , "*" , "*" , "*" , " "                      '7
Data "-" , "*" , "*" , "*" , " "                            'B
Data "*" , "*" , "*" , "*" , "-" , " "                      '4
Data "X"
Zuletzt geändert von Windi am Fr 4. Jan 2008, 09:56, insgesamt 1-mal geändert.
Bild

conrad
Geocacher
Beiträge: 74
Registriert: So 16. Dez 2007, 09:03
Wohnort: BS

Beitrag von conrad » Fr 4. Jan 2008, 05:28

Vielen Dank für die Mühe.
Hätte man alles neu schreiben müssen? Hab wirklich versucht mich in die 5.10 rein zu lesen und irgendwie muss das ja auch gehen..... :evil:
Na wie auch immer, ich versuch das gleich mal. Sind die Zeichen in der Anzahl begrenzt?
Vielen Dank nochmals
Conrad

conrad
Geocacher
Beiträge: 74
Registriert: So 16. Dez 2007, 09:03
Wohnort: BS

Beitrag von conrad » Fr 4. Jan 2008, 06:48

so, hab es jetzt mal drauf, vorerst unverändert also mit Deinen Datazeilen..... Leider Null-Reaktion, garnix.
Hab die Fusebits alle auf Standard.....
Ne Idee was da los ist?
Mir ist nochwas aufgefallen.... Normal hat Bascom immer nur "Writing rom" und "Reading rom" geschrieben. Nun kommt hinterher noch "Fuse and Log Bits" und danach ist z.B. G-Bit wieder auf 0. Kommt das aus Deinem Programm heraus?
Gruß Conrad

Benutzeravatar
Windi
Geoguru
Beiträge: 6338
Registriert: Fr 16. Jan 2004, 23:57
Kontaktdaten:

Beitrag von Windi » Fr 4. Jan 2008, 10:01

conrad hat geschrieben:so, hab es jetzt mal drauf, vorerst unverändert also mit Deinen Datazeilen..... Leider Null-Reaktion, garnix.
Hab die Fusebits alle auf Standard.....
Ne Idee was da los ist?
Mir ist nochwas aufgefallen.... Normal hat Bascom immer nur "Writing rom" und "Reading rom" geschrieben. Nun kommt hinterher noch "Fuse and Log Bits" und danach ist z.B. G-Bit wieder auf 0. Kommt das aus Deinem Programm heraus?
Gruß Conrad
Hatte noch einen Fehler drin.
Im Unterprogramm "Morsen" fehlte noch "Restore Daten".
Das die Fuse-Bits nochmals beschrieben werden ist sehr seltsam. Dieses Phänomen hatte ich auch schon mal.
Aus irgendeinem Grund hatte Bascom in meinen Sourcecode den Befehl "$PROG" eingefügt. Damit kann man vom Programm aus die Fuses programmieren. Schau doch mal in Deinem Programm nach ob da ein "$PROG"-Befehl drin steht. Bei mir stand er damals ganz oben.
conrad hat geschrieben:Sind die Zeichen in der Anzahl begrenzt?
Es passen natürlich nur so viele Zeichen rein bis das Flash-Ram des Tinys voll ist.
Bild

conrad
Geocacher
Beiträge: 74
Registriert: So 16. Dez 2007, 09:03
Wohnort: BS

Beitrag von conrad » Fr 4. Jan 2008, 10:32

Windi hat geschrieben: Hatte noch einen Fehler drin.
Im Unterprogramm "Morsen" fehlte noch "Restore Daten".
.
ich teste gleich mal, danke fürs nachschauen
Windi hat geschrieben: Das die Fuse-Bits nochmals beschrieben werden ist sehr seltsam. Dieses Phänomen hatte ich auch schon mal.
Aus irgendeinem Grund hatte Bascom in meinen Sourcecode den Befehl "$PROG" eingefügt. Damit kann man vom Programm aus die Fuses programmieren. Schau doch mal in Deinem Programm nach ob da ein "$PROG"-Befehl drin steht. Bei mir stand er damals ganz oben.
.
jepp steht gaaaaanz oben. raus damit?
Windi hat geschrieben: Es passen natürlich nur so viele Zeichen rein bis das Flash-Ram des Tinys voll ist.
Aber der muß in diesem Fall nicht separat beschrieben werden? Richtig?
Gruß Conrad

conrad
Geocacher
Beiträge: 74
Registriert: So 16. Dez 2007, 09:03
Wohnort: BS

Beitrag von conrad » Fr 4. Jan 2008, 10:39

Also, setze ich Restore Daten vor Loop wirds nen Dauerblinker, dahinter geht nix mehr :-(
$prog ist raus diese Meldung bleibt aus
Gruß Conrad
edit, ups, grad gesehen das Du es oben schon editiert hast :oops:

Benutzeravatar
Windi
Geoguru
Beiträge: 6338
Registriert: Fr 16. Jan 2004, 23:57
Kontaktdaten:

Beitrag von Windi » Fr 4. Jan 2008, 11:01

conrad hat geschrieben:Aber der muß in diesem Fall nicht separat beschrieben werden? Richtig?
Die Morsezeichen liegen bei meinem Programm nicht im Eprom sondern im Flash-Ram. Das ist der Speicher in dem auch das eigentliche Programm liegt. Die Morsedaten werden gleichzeitig mit dem Programm übertragen.

Läuft es jetzt bei Dir?
Bild

conrad
Geocacher
Beiträge: 74
Registriert: So 16. Dez 2007, 09:03
Wohnort: BS

Beitrag von conrad » Fr 4. Jan 2008, 11:51

Windi hat geschrieben: Läuft es jetzt bei Dir?
Ja, vielen Dank, läuft klasse. bin grad am spielen ;-)

Antworten