• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Reaktives Licht mit Atmel AVR

KaJu

Geocacher
@all: Vielen Dank für die vielen Hinweise.

Habe den Tiny mal nur an die Batterie angeschlossen: Wurde warm. Habe einen anderen Tiny eingesetzt: wurde nicht warm. Leider werde ich frühestens Sonntag dazu kommen, weiter zu basteln, dann werde ich die Schaltung nochmal aufbauen und hier berichten.

Gruß, Kai
 

Windi

Geoguru
@Fulbrich: Nächster Versuch
Ändere doch bitte die Zeile um in: REM If Led_ladezustand = 1 Then Gosub Leuchten

Danach nochmal kompilieren (Symbol mit dem schwarzen IC) und in den Chip laden (Symbol mit der grünen Tür, Programm).
Jetzt sieht man den Fortschrittsbalken für Programmieren und Überprüfung. Danach muss die Tür immer noch grün sein sonst wurde das Programm nicht richtig geladen.
Funktioniert das bis hierher fehlerfrei?

Manchmal klappt es nur wenn man den Druckerport absteckt.

Fusebit E muss auf 1 (Off) stehen.
Fusebit DVBA auf 1011 (128 kHz intern 14CK+64ms)

Jetzt sollte die LED (egal ob hell oder dunkel) alle 3 Sekunden kurz aufleuchten.
 

fulbrich

Geocacher
Do

Wait 3

Gosub Leuchten
Rem Gosub Led_abfrage
Rem If Led_ladezustand = 1 Then Gosub Leuchten
Loop
@Windi

Hallo Windi, ich habe das Testprogramm wie oben angepaßt und nocheinmal probiert. Es müßte doch so dauerblinken, nicht war ?
Leider blinkt noch immer nichts.

A) Programm compiled :D
B) FUSE Bits kontrolliert :D
C) Programm übertragen : BASCOM-AVR sagt write... read... verify ok :D
D) Am Chip messe ich zwischen PIN 8 und PIN PIN 4 = 4.99 Volt :D
E) LED und R in Reihe von nun 120R bei 5V leuchtet, wenn ich diese direkt an 5V anklemme :D
F) mit dem Multimeter messe ich in der Schaltung selbst über LED und R1 keine Gleichspannung , egal wieherum ich die LED anschließe. Ich habe das Gefühl, das an den PINs 2/3 nichts passiert. Werden vom uC wirklich die richtigen PINs angesteuert :? ... muß ja, bei den anderen funktioniert es ja :shock:

Was müßte ich denn machen, wenn ich über PIN2 eine LED mit Widerstand direkt gegen (-) schalten möchte ? Es wäre für mich schon ein Erfolg, wenn ich es erstmal hinbekäme eine LED zum Leuchte zu bringen.

Ich mach mal ein Foto von meinem Steckbrett:



Wäre schön, wenn jemand schaltungstechnisch gucken könnte. Muß doch für mich zu schaffen sein 3 Bauteile zu verbinden :oops:

----> Es geht. Lösung: mein nagelneues Steckbrett hat eine Defekt in der Kontaktreihe des PIN2 :twisted: :twisted: :twisted:

@Hauke und Daniel_B

Hallo, ich glaube es nicht !!! Mein nageneues Steckbrett von cgs hat an einige Stellen Kontakschwierigkeiten. Die Lieferung der Bauteile durch csd-electronics http://www.csd-electronics.de war ansonsten sehr schnell und unproblematisch. Vielleicht kann ich das Board reklamieren. Die Kontaktbahnen sind unterbrochen. Es kam nichts am Widerstand R an. Das kostete mir 3 Abende und eine saure Ehefrau :wink: Nun habe ich nachgemessen und den Widerstand direkt an das IC gelötet. Es klappt nun wunderbar.

R1 = 120 Ohm für Uv=5Volt (getestet und OK)
und
R1 = 56 Ohm für Uv=3Volt (getestet und OK)
 

Hauke

Geocacher
Das ist aber kein Breadboard von P*llin, so wie ich eins hatte, oder?
Da kann man nämlich 'lustige' Effekte erleben, was die Durchkontaktierung angeht. Bsp: 10kOhm bis zu einem Megaohm bei einer Reihe, wo eigentlich 0 Ohm herrschen sollten.
 

Lotti

Geomaster
Windi schrieb:
...Nach ein bischen Recherche und Nachfragen im Forum von http://www.roboternetz.de hab ich es endlich hingebracht.
Ich habe einfach die Watchdog-Register händisch gesetzt und schon hat es geklappt.

...

'Watchdog definieren: 8 Sekunden, Interrupt auslösen, kein Reset
Wdtcr = &B11110001


Supi,

kannst Du uns den Watchdog ein wenig aufdröseln? Welche Bits bewirken was?

Gruss Volkmar
 

Schnueffler

Geoguru
Windi schrieb:
@Schnueffler: :oops: Asche auf mein Haupt. Hab ich total vergessen. Warum erinnerst Du mich auch nicht mehr dran.
Dieses Wochenende mach ich sie Dir fertig.
Hand aufs Herz, Versprochen, Garantiert, 100%ig.
Mach ich doch gerade!!! Danke. Sag mir dann Bescheid, was Du bekommst und ich werde Dir auch die Überweisung fertig machen. Alles Weitere per Mail.
 

Dani_B

Geocacher
@fulbrich

Vielleicht hast du ein Reset-Problem und der Tiny läuft einfach nicht los.
Setz noch einen Widerstand entsprechend Foto ein und zieh den Parallel-Port nach dem programmieren mal ab.


Gruß,
Daniel
 

fulbrich

Geocacher
Hauke schrieb:
Das ist aber kein Breadboard von P*llin, so wie ich eins hatte, oder?
Da kann man nämlich 'lustige' Effekte erleben, was die Durchkontaktierung angeht. Bsp: 10kOhm bis zu einem Megaohm bei einer Reihe, wo eigentlich 0 Ohm herrschen sollten.

@Hauke und Daniel_B

Hallo, ich glaube es nicht !!! Mein nageneues Steckbrett von CSD hat an einige Stellen Kontakschwierigkeiten. Die Kontaktbahnen sind unterbrochen. Es kam nichts am Widerstand R an. Nun habe ich nachgemessen und den Widerstand direkt an das IC gelötet. Es klappt nun wunderbar. Den Zusatzwiderstand zum Reset-Pin brauche ich nun doch nicht.

R1 = 120 Ohm für Uv=5Volt (getestet und OK)
und
R1 = 56 Ohm für Uv=3Volt (muß noch getestet werden)

Allen Dank für Eure Hilfen und Tips !!!!
 

Windi

Geoguru
@Fulbrich: Wunderbar das es jetzt klappt.
Nach dem Bild vom Steckbrett hätte ich jetzt auch nur das Steckbrett in Verdacht gehabt, da ja die Verdrahtumg korrekt ist.
Hat sich ja glücklicherweise bereits erledigt.
 

Windi

Geoguru
Lotti schrieb:
kannst Du uns den Watchdog ein wenig aufdröseln? Welche Bits bewirken was?
Hierzu empfehle ich einen Blick auf die Seiten 39 und 40 vom Datenblatt.
Darin ist eigentlich alles erklärt.
Die Watchdogzeit wird über die Bits WDP0-WDP3 eingestellt.
Dabei allerdings darauf achten dass WDP3 seperat liegt und WDP0-2 zusammen liegen.
 

fulbrich

Geocacher
$regfile = "ATtiny13.DAT"
$crystal = 113000 'Reale Frequenz des internen 128kHz-Oszillators
$hwstack = 6

Hallo Windi,
ich wollte vorschlagen Dein Programm im Kopf mit $hwstack zu erweitern, um comiler error "Out of SRAM space" zu vermeiden. So entfällt das manuelle Umschalten in der Einstellung des BASCOM AVR.
 

fulbrich

Geocacher
Code:
'============================================================
'
' ************************************
' ***                              ***
' *** Reaktiv-Tiny v0.1 24/11/2005 ***
' *** Version v0.2 13.02.2006 Morse ***
' ***                         (FU)     ***
' ************************************
'
' µC: ATtiny13
' +Ub: 3,43 V
' I: 58 µA
' Reichweite Dorcy:
' Reichweite 4D-MagLite:
'
'============================================================

$regfile = "ATtiny13.DAT"
$crystal = 113000                                           'Reale Frequenz des internen 128kHz-Oszillators
$hwstack = 6                                                'sram Compilerfehler vermeiden

Config Portb = &B00011000                                   'Pinb.3 und .4 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = &B11100111                                          'Pullups zuschalten, außer für Pinb.3 und .4

Stop Adc                                                    'A/D-Wandler abschalten, um Strom zu sparen
Stop Ac                                                     'Analog-Komparator abschalten, um Strom zu sparen

Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim Led_ladezustand As Bit
Dim Hell As Bit
Dim Dunkel As Bit
Dim Morse$ As String * 10                                   '10 Takte, die gemorst werden sollen
Dim S$ As String * 1                                        'Merken zum Morsen (aktueller Takt)


' *********************************************************
' Start des Hauptprogramms
Do
    Gosub Led_abfrage
    If Led_ladezustand = 0 Then Hell = 1                    'Bei Licht Merker setzen
    If Hell = 1 And B < 255 Then B = B + 1                  'Wenn Merker gesetzt wurde, Zähler für Lichtdauer erhöhen (bis max. 255)
    If Led_ladezustand = 1 And Hell = 1 And B < 30 Then     'Wenn es wieder dunkel ist dann nachsehen für wie lange
       Dunkel = 1                                           'Merker Setzen
       For C = 0 To 5                                       'LED-Zustand mehrmals abfragen
         Gosub Led_abfrage
         If Led_ladezustand = 0 Then Dunkel = 0             'Wenn wieder Hell dann Dunkel-Merker löschen
       Next B
Rem       If dunkel = 1 Then Gosub Blinken                 'Wenn Dunkel-Merker gesetzt Blinken
       If Dunkel = 1 Then Gosub Morsen                      'Wenn Dunkel-Merker gesetzt Morsen
    End If


    If Led_ladezustand = 1 Then                             'Bei Dunkelheit Merker und Zähler für Lichtdauer löschen
        Hell = 0
        B = 0
    End If
Loop
' **********************************************************


' **********************************************************
' Abfrage, ob LED beleuchtet wird (Ladezustand 0 = Licht, 1 = kein Licht)
Led_abfrage:
    Portb.3 = 0                                             'Portb.3 auf Masse schalten
    Portb.4 = 1                                             'Portb.4 auf +Ub schalten, um die LED zu 'laden'
    Waitus 1                                                'Ladezeit 1 µs, kann ggf. noch verkleinert werden
    Config Portb.4 = Input                                  'Portb.4 nun zwecks Abfrage der LED-Ladung auf 'Eingang' schalten
    Portb.4 = 0                                             'Pullup abschalten, sonst geht's nicht!
    Waitms 20                                              'Entladezeit  20ms (100 ms) - je kleiner, je unempfindlicher
    Led_ladezustand = Pinb.4                                'Ladezustand einlesen: '1' -> dunkel, '0' -> hell
    Config Portb.4 = Output                                 'Portb.4 wieder auf Ausgang schalten
    Portb.4 = 0                                             'Portb.4 auf Masse schalten
Return
' *****************************************************************************

' *****************************************************************************
' Mit LED kurz blinken
Blinken:
    For A = 1 To 10
        Portb.3 = 1
        Waitms 10
        Portb.3 = 0
        Waitms 100
    Next A
Return
' *****************************************************************************


' *****************************************************************************
' Mit LED Zeichen morsen (10 Impulse)
 Morsen:
        Morse$ = "--***--***"                               'String aus 10 Zeichen * = kurz - = lang

        For A = 1 To 10                                     '10 Zeichen auslesen und auswerten
        S$ = Mid(morse$ , A , 1)                            'Teilstring auslesen
        If S$ = "*" Then                                    'wenn kurz Blinken
            Portb.3 = 1                                     ' LED AN
            Waitms 30                                       ' kurz warten
            Portb.3 = 0                                     ' LED AUS
            Waitms 1000                                     ' lang warten
        Else                                                'sonst lang blinken
            Portb.3 = 1                                     ' LED AN
            Waitms 300                                      ' lange warten
            Portb.3 = 0                                     ' LED AUS
            Waitms 1000                                     ' lang warten
        End If
    Next A
Return
'******************************************************************************

End

Hallo,
ich habe das Originalprogramm etwas abgewandelt und einen Morseteil eingebaut. Es werden 10 Takte gemorst. Der String in dem Morseunterprogramm kann vor dem Compilen angepaßt werden.
Wenn mehr als 10 Signale gegeben werden sollen, muß am Programmanfang die Stringlänge verlängert werden, sie steht zur Zeit auf 10. Die Schaltung könnte interessant sein, wenn der Blinkrythmus z.B. ein Teil der Geocache-Aufgabenstellung ist. Im Hautprogramm habe ich den Sprung in das "Blinken" Unterprogramm auskommentiert und stattdessen einen Sprung in das Unterprogramm "Morsen" eingebaut.
 
OP
S

Sir Vivor

Geocacher
Moin,

fulbrich schrieb:
... ich habe das Originalprogramm etwas abgewandelt und einen Morseteil eingebaut. ... Die Schaltung könnte interessant sein, wenn der Blinkrythmus z.B. ein Teil der Geocache-Aufgabenstellung ist. ...
Alternativ dazu kann man auch das Programm mit Teach-In-Modus verwenden. Vorteil: Bei (Morse-)Code-Änderungen muß man den Tiny nicht neu programmieren...! :wink:

Viele Grüße,

Sir Vivor
 

fulbrich

Geocacher
Sir Vivor schrieb:
Moin,

Alternativ dazu kann man auch das Programm mit Teach-In-Modus verwenden. Vorteil: Bei (Morse-)Code-Änderungen muß man den Tiny nicht neu programmieren...! :wink:
Sir Vivor

Stimmt, ich finde den teach-in modus echt klasse :D :D , nur ist mir persönlich die Aufzeichnungszeitraum etwas zu kurz :? . Ich glaube es waren 5 Sekunden ?
In 5 Sekunden mehrere gut unterscheidbare Takte aufzuzeichnen finde ich persönlich etwas schwierig. Ich fände es interessant den teach-in modus so zu ändern, daß die Impulse in kurz/lang in eine Tabelle abgelegt und später mit anderen Pulslängen ausgegeben werden, sodaß eine Ausgabezeit von mehr als 5 Sekunden möglich wären..... ich weiß nur nicht wie man die Übersetzung im teach-in modus implementieren könnte :shock: .
 
später mit anderen Pulslängen ausgegeben werden, sodaß eine Ausgabezeit von mehr als 5 Sekunden möglich wären..... ich weiß nur nicht wie man die Übersetzung im teach-in modus implementieren könnte :shock: .

Man könnte aber auch den Rom effizienter ausnutzen - Wenn ich mich recht entsinne verwendet das Programm jeweils ein ganzes Byte pro Blinktakt - es würde jedoch ein Bit reichen - das währen dann 40 Sekunden - hab jetzt aber leider nicht die Zeit dazu, muss für meine Prüfung morgen lernen...
chm

Edit: Typo
 
OP
S

Sir Vivor

Geocacher
christophmueller.org schrieb:
... Wenn ich mich recht entsinne verwendet das Programm jeweils ein ganzes Byte pro Blinktakt - es würde jedoch ein Bit reichen - das währen dan 40 Sekunden ...
Stimmt wohl! :wink:

Aber zum Bit-Rotieren hatte ich einfach keine Lust - obwohl es ja an sich kein Thema wäre... Mal schauen.
 

fulbrich

Geocacher
Code:
Led_abfrage: 
    Portb.3 = 0                         'Portb.3 auf Masse schalten 
    Portb.4 = 1                         'Portb.4 auf +Ub schalten, um die LED zu 'laden' 
    Waitus 1                            'Ladezeit 1 µs, kann ggf. noch verkleinert werden 
    Config Portb.4 = Input              'Portb.4 nun zwecks Abfrage der LED-Ladung auf 'Eingang' schalten 
    Portb.4 = 0                          'Pullup abschalten, sonst geht's nicht! 
    Waitms 20                           'Entladezeit 100 ms - je kleiner, je unempfindlicher 
    Led_ladezustand = Pinb.4            'Ladezustand einlesen: '1' -> dunkel, '0' -> hell 
    Config Portb.4 = Output             'Portb.4 wieder auf Ausgang schalten 
    Portb.4 = 0                          'Portb.4 auf Masse schalten 
Return

Hallo zusammen,
meine Schaltung funktioniert nun und ich bin ganz zufrieden. Tolles Projekt :) Nun habe ich noch eine Frage zum Unterprogramm "Led_abfrage" und der Entladezeit.

So wie ich es verstanden habe, wird dort die Empfindlichkeit der Schaltung auf Lichtänderungen an der LED eingestellt. Wenn der Wert kleiner wird, wird die Schaltung unempfindlicher. Wird über diesen Wert die Emfindlichkeit bezüglich einer relativen Helligkeitsänderung eingestellt oder einen absoluten Wert ?

Mit absoluten Wert meine ich eine feste Helligkeit, ab wann es Blinken soll.
Also, kann man z.B. einstellen wie dunkel es mindestens sein muß, damit es überhautpt zum Blinken kommen kann.

Mit relativen Wert meine ich Auslösung des Blinkvorgangs unabhängig von der Grundhelligkeit ... es muß nur etwas heller werden als es schon ist.
 

Lotti

Geomaster
Moin,

Code:
Waitms 20                           'Entladezeit 100 ms - je kleiner, je unempfindlicher

hierüber wird die relative Empfindlichkeit bzw. Helligkeit eingestellt. Am Anfang der Subroutine wird die LED "geladen" und mit der Verzögerung Zeit gegeben, diese Ladung durch Einwirkung von Licht abzubauen. Wartest Du nur kurz, muss der Impuls bzw. das Licht stark sein. Wartest Du lange, reicht ein schwaches Licht über längere Zeit um den Zustand "Hell" zu erzeugen. Welcher Wert für Dich richtig ist, hängt auch von der verwendeten LED ab. Ich selber bin 150-200ms zufrieden. Mein Blinker fängt dann draussen ca. 15 Minuten nach Sonnenuntergang an zu blinken.

Gruss Volkmar
 

Geo Chief

Geocacher
Huhu,
ich verfolge den Fred jetzt auch schon ziemlich lange und möchte das Teil demnächst auch einmal nachbauen. Nachdem ich alles "überflogen" habe, habe ich fast schon wieder vergessen wo die "wichtigen" Infos zur Programmierung, das aktuelle Programm und der finale Schaltplan stehen. Ich rege daher an, daß sich jemand der sich mit dem Projekt gut auskennt, alle wichtigen Sachen in einem neuen Fred zusammenfasst und diesen auch aktuell hält. Die allgemeine Diskussion sollte dann weiterhin in diesem Fred stattfinden. Das Projekt ist ja, wie man an den Aufrufen (bis eben 11430) sieht, für viele Leute von Interesse. Das wäre echt klasse und würde den Nachbau deutlich vereinfachen :)
 
Oben