• 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

Lotti

Geomaster
Moin,

ich glaub ein Wiki-Beitrag wäre vielleicht besser geeignet, denn viele Kleinigkeiten wurden mir erst durch Versuch/Frage/Antwort Beiträge klar. Da hilft ein zusammen kopieren eventuell nicht viel.

Gruss Volkmar
 

radioscout

Geoking
Lotti schrieb:
denn viele Kleinigkeiten wurden mir erst durch Versuch/Frage/Antwort Beiträge klar.
Etwa so, wie bei vielen Armin Maiwald-Filmen, bei denen der Zuschauer auch oft Versuch und Irrtum und damit den Weg zur Lösung zu sehen bekommt.
Also auf keinen Fall trennen.
 

Geo Chief

Geocacher
Ich dachte an eine Zusammenfassung aller wichtigen Informationen damit man das Teil nachbauen kann ohne 60 Minuten nachlesen zu müssen.
Wenn es neue Erkenntnisse gibt, sollten die dann in die Zusammenfassung einfließen. Wiki ist gar keine so schlechte Idee.
Eine Zusammenfassung die aktuell bleibt würde mir jedoch völlig ausreichen.
 
OP
S

Sir Vivor

Geocacher
Moin,

fulbrich schrieb:
... 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 ? ...
Der Wert stellt eine absolute Helligkeitsempfindlichkeit ein.

By the way: Die Zeile "Waitms 20 ... 'Entladezeit 100 ms - je kleiner, je unempfindlicher" ist so natürlich absoluter Blödsinn...! Beide ms-Werte sollten zwecks besserer Übersicht logischerweise gleich sein.

radioscout schrieb:
Ich könnte den Fred teilen und alles zusammenfassen.
Andere Vorschläge?
Jo. Die Idee, den Schaltplan und das (Grund-)Programm in einen neuen Thread kopieren und diesen dann "pinnen". Ergänzende Programme (Filter usw.) sollten da natürlich auch mit rein...

Es grüßt...

...Sir Vivor
 

fulbrich

Geocacher
µP geschrottet .... mußte feststellen, daß schon 30 sekündiges Verpolen der 3 Volt Stromversorgung den ATiny brät. Er wurde sehr heiß und stellte seine Funktion ein.

Also aufpassen :roll:
 

_DiSa_

Geocacher
OT:
Also DER Prozessor hat bei meinen Experimenten auch nicht ueberlebt:

http://www.speckmann.de/hochspannung/ :)

Hochspannungsnetzteil einer alten Neonreklame genommen. Und Digicam auf Macro und etwas laengerer Belichtungzeit gestellt.
 

Windi

Geoguru
Ein kurzzeitiges Verpolen (ca. 15 Sekunden) hat einer meiner Tinys glücklicherweise überlebt.
Als ich gemerkt habe dass die Schaltung nicht funzt und der Prozessor auf einmal ziemlich warm wurde hab ich noch schnell das Netzgerät abschalten können.
 

Geo Chief

Geocacher
So, heute ist meine Bestellung endlich angekommen. Ich also schnell den Chip in die schon vorbereitete Programmierschaltung gesteckt und los...

Das lief alles soweit ganz gut bis nix mehr ging. Nachdem die Fuse-Bits geschrieben wurden, wurde der Chip nicht mehr erkannt. Der weiter oben erwähnte 10k-Widerstand hilft leider nicht. Könnte die Leitungslänge evtl. noch ein Grund sein? Mein Kabel ist ca. 1m lang.

Dann versuchte ich das Programm zu compilieren:

Code:
'============================================================ 
' 
' ************************************ 
' ***                              *** 
' *** Reaktiv-Tiny v0.1 28/11/2005 *** 
' ***                              *** 
' ************************************ 
' 
' µ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 

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 Led_ladezustand As Bit 
Dim Led_lichtcode As Byte 
Dim Lichtcode_valid As Bit 
Dim Hell As Bit 

Lichtcode_valid = 0                                         'Merker löschen (EEPROM-Inhalt wird beim Blinken nicht verwendet) 
Gosub Blinken                                               '10 x kurz blinken 
Portb.3 = 1                                                 ') 
Wait 1                                                      '} 1 x lang blinken (Teach-In-Anfang) 
Portb.3 = 0                                                 ') 
For A = 1 To 63                                             '63 Bytes des EEPROM's haben wir zur Verfügung 
    Gosub Led_abfrage 
    If Led_ladezustand = 0 Then                             'Wenn LED beleuchtet wurde, dann 
        Led_lichtcode = 255                                 'Lichtcode-Byte setzen 
        Lichtcode_valid = 1                                 'Merker setzen (EEPROM-Inhalt wird beim Blinken verwendet) 
    Else                                                    'andernfalls 
        Led_lichtcode = 0                                   'Lichtcode-Byte löschen 
    End If 
    Writeeeprom Led_lichtcode , A                         'Lichtcode-Byte in's EEPROM schreiben 
    Waitms 65                                               '65 ms warten 
Next A 
For A = 1 To 3                                              ') 
    Portb.3 = 1                                             ') 
    Waitms 50                                               '} 3 x kurz blinken (Teach-In-Ende) 
    Portb.3 = 0                                             ') 
    Waitms 50                                               ') 
Next A                                                      ') 

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 < 50 Then Gosub Blinken       'Wenn es wieder dunkel ist und der Lichtimpuls nur kurz war, dann blinken 
    If Led_ladezustand = 1 Then                             'Bei Dunkelheit Merker und Zähler für Lichtdauer löschen 
        Hell = 0 
        B = 0 
    End If 
Loop 

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 20 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 

Blinken: 
    Portb.3 = 0 
    Portb.4 = 0 
    If Lichtcode_valid = 0 Then                             'Standart-Blinksequenz (ohne EEPROM-Inhalt) 
        For A = 1 To 10 
            Portb.3 = 1 
            Waitms 50 
            Portb.3 = 0 
            Waitms 500 
        Next A 
    Else                                                    'Blinksequenz mit EEPROM-Inhalt 
        For A = 1 To 63 
            Readeeprom Led_lichtcode , A 
            If Led_lichtcode = 255 Then 
                Portb.3 = 1 
            Else 
                Portb.3 = 0 
            End If 
            Waitms 90 
        Next A 
    End If 
Return 

End

Hierbei traten allerlei Fehler auf obwohl ich am Code nichts veränderte:

Code:
Dim A As Byte
Hier steht z.B. Error 22: "Out of SRAM space, in File...

Code:
For A = 1 To 63
Hier steht z.B. Error 46 Assignment error [A:0 1:112]

usw.
Woran könnte das denn liegen?
 

fulbrich

Geocacher
Geo Chief schrieb:
Hier steht z.B. Error 22: "Out of SRAM space, in File...

usw.
Woran könnte das denn liegen?

Hallo, füge doch in das Basic-Programm die Zeile

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

ein. Ein anderer Weg ist im Basic-Compiler den HWSTACK für den ATiny13 von 32 auf 6 zu setzen. Die Programmzeile "$hwstack"macht dies automatisch.

Bist Du sicher, daß die Fusebits richtig gesetzt waren ?
 

Geo Chief

Geocacher
Hm, die Bits sollten richtig gesetzt gewesen sein. Da bin ich mir schon sicher.
Aber wieso soll das Programm noch erweitert werden? Ich denke, das ist so wie es ist compilierbar?
Ich möchte nur ungern noch ein paar Chips schrotten :roll:
 

Geo Chief

Geocacher
Ich habe es noch mal versucht. War wieder ein Reinfall :evil:

Jungfräulicher Chip mit geschriebenen Bits:
atmel2.jpg


Wenn ich dann einen Refresh mach kommt das:
atmel3.jpg


und das
atmel4.jpg
 

fulbrich

Geocacher
Geo Chief schrieb:
Hm, die Bits sollten richtig gesetzt gewesen sein. Da bin ich mir schon sicher.
Aber wieso soll das Programm noch erweitert werden? Ich denke, das ist so wie es ist compilierbar?
Ich möchte nur ungern noch ein paar Chips schrotten :roll:

Der Wert scheint bei einigen BASCOM Compiler Versionen für den ATiny mit 32 falsch eingestellt zu sein. Entweder man korrigiert den Wert im Compiler oder steuert den Wert im source-code an, sodaß er automatisch richtig gesetzt wird.
Beim mir trat der Fehler zuerst beim comilen auch auf, bis ich den Wert gesetz habe.

Bein Chip lies sich nur gut programmieren, wenn an der Schaltung eine Spannung anlag. Zwar geht es wohl auch ohne Spannung an der Schaltung... dann wird der Prozessor uber die LPT Schnittstelle beim Programieren versorgt.... soll aber nicht so gut sein.
 

Windi

Geoguru
Geo Chief schrieb:
Hm, die Bits sollten richtig gesetzt gewesen sein. Da bin ich mir schon sicher.
Aber wieso soll das Programm noch erweitert werden? Ich denke, das ist so wie es ist compilierbar?
Ich möchte nur ungern noch ein paar Chips schrotten :roll:

Mit dem Ändern von Hwstack schrottest Du garantiert keine Chips. Das ist eine reine Softwaregeschichte von Bascom. Je nach Compilerversion ist dort ein bestimmter Wert voreingestellt den Bascom standardmäßig verwendet.
Wenn der Standardwert zu groß ist bleibt dem Programm zu wenig Ram übrig um die Variablen zu definieren und es kommt zur Fehlermeldung.

Das Problem dass sich der Chip nicht mehr ansprechen lässt könnte an der Datenübertragung der Parallelschnittstelle liegen. Diese darf höchstens 1/4 des Prozessortaktes betragen. Eventuell muss man hier bei der Konfiguration des Programmers einen Delaywert einstellen.
Probier mal einen jungfräulichen Chip mit der Standardeinstellung (9,6 Mhz, Divide clock by 8 on) und stelle für den Crystal-Wert 1200000 ein.
Klappt die Programmierung damit?
Wenn das klappt mal 4,8 Mhz und off sowie Crytsal 4800000 einstellen.
Wenn das klappt 4,8 Mhz und on sowie Crystal 600000 einstellen.
 
Oben