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

Reaktivlicht mit 7-Segmentanzeige

OP
K

kirby27b

Geocacher
Hi,

so sehen meine Fuses unter Bascom aus. Netterweise lassen sich die Fuses in der neuen Bascom Version auch über das STK500 einstellen. Ging vorher bei mir nur über den Umweg mittels AVR-Studio. Was bei mir mal ein Problem gewesen ist das ich mit der länge der Programierleitung schwierigkeiten hatte. Nachdem ich die Leitung auf 20cm gekürtzt hatte war der Tiny auf einmal wieder ansprechbar. Allerdings weis ich nicht ob das auch für den Parallelport Adapter zutreffend ist.

Grüße Olaf
 

Anhänge

  • Fuses-fertig.jpg
    Fuses-fertig.jpg
    94,9 KB · Aufrufe: 530
OP
K

kirby27b

Geocacher
Hi,

was mich nur Wundert ist das wir hier so unterschiedliche Erfahrungen mit dem Programm machen. Ich habe zum Bleistift keine Watchdog oder ähnliche Probleme. Weder auf dem Steckbrett mit dem Attiny24V10PU ( DIP) noch dem Attiny24V 10SSU ( SMD ) auf der Platine. Sollte das alles wirklich am Programieradapter liegen? Oder stellen sie die Vielbeiner nur manchmal zickig an je nach art der Programierversuche. Ich würd ja auch gerne den Parallelportadapter mal versuchen, aber leider verweigert meine Druckerschnittstelle jede Zusammenarbeit damit.

Grüße Olaf
 

ksbender

Geocacher
Auch wenn#s ein bischen off topic ist hier doch folgende Frage:
Bei mir liegen mittlerweile schon 4 Tinys 24 rum, die sich nicht mehr ansprechen lassen.
Ja, es läuft irgendetwas schief und ich habe keine Ahnung was da falsch ist.
Bekommt man mit dem AVR STK 500 die wieder zum Leben?
Brauche ich noch etwas zusätzliches? In der Beschreibung ist nicht von 14 Pin µc die Rede!!

Zum topic:
Ich habe ein ganz kleines Blinkprogramm geschrieben.
Code:
$regfile = "ATtiny24.DAT"
$crystal = 16000                                            'Frequenz des internen Oszillators
$hwstack = 20                                               'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
Config Adc = Single , Prescaler = Auto
Config Portb = &B00000000                                   'Pinb.3 auf 'Ausgang', Rest auf 'Eingang' schalten
Config Porta = &B00000001
Porta = 0

Do
Porta.0 = 1
Waitms 2000
Porta.0 = 0
Waitms 2000
Loop

Damit blinkt der 24 er tatsächlich. Aber mit dem Programm von Olaf tut sich leider nichts.
Gruß
Stephan
 
OP
K

kirby27b

Geocacher
Hi,

also der Tiny24 ist wohl nur mit einem Adapter im STK500 zu programieren. Habe im Web eine Anleitung für einen Adapter gefunden den ich wohl bei Zeiten mal nachbauen werde. Möglicherweise lassen sich ja im HV Modus die vestorbenen wiederbeleben? Was mir nur völlig komisch ist das andere mit meinem Program Probleme haben ???????
Gibt es denn hier auch welche die das Program ohne Probleme einsetzen? Möglicherweise sind ja noch andere Dinge von Atmel geändert worden als nur die Attiny24.dat Datei?

Grüße Olaf
 

ksbender

Geocacher
Hallo Olaf,

nein, man kann auch mit dem einfachen Programmieradapter aus dem Kochbuch arbeiten.
Auch wenn´s für heute nicht das Ergebnis ist, das ich haben wollte - EIN Segment der Anzeige leuchtet brav im 2 Sekunden Takt. :D
Da muß was gehen.
Aber wie kriege ich den kleinen Tiny´s wiederbelebt?
Gruß
Stephan
 

upigors

Geowizard
ich denke mal das erste programm läuft bei den meisten und beim 2. gibts probleme... am adapter liegt das nicht. da bin ich mir recht sicher. ich tippe bei mir auf die bits oder nen kleines fehlerchen im 2. proggi....
 
OP
K

kirby27b

Geocacher
Hi,
nur so eine Idee vor dem ersten Kaffee :???: kann es sein das ältere Bascomversionen, die waren doch meines Wissen nach auf 2Kb Code begrenzt, etwas von dem längeren 2ten Programm abschneiden und es daher nicht mehr funktioniert? Denn das Programm entspricht dem ersten bis auf die zusätzlichen Gimiks.
Was auch sein könnte ist das die Zeitumstellung in den Lauflichtern und der Nord / Ost Anzeige Probleme bereiten. Läuft das 2te Programm bei Euch wenn Ihr diese zusätzlichen Zeilen inklusive der Ansprungzeilen heraus nehmt?
Was mich Wundert ist das ich keines der Probleme selber hatte. Gut einen Tiny habe ich gegrillt, aber das zählt eher zu " Zu blöd zum Anschließen"

Könnte das auch nen Compilerproblem sein?
Welche Bascomversionen werden denn so genutzt?


So aber nu gehts zur Kaffeetasse :D

Grüße Olaf
 

thomas_st

Geowizard
kirby27b schrieb:
kann es sein das ältere Bascomversionen, die waren doch meines Wissen nach auf 2Kb Code begrenzt, etwas von dem längeren 2ten Programm abschneiden und es daher nicht mehr funktioniert?
Stop, stop, stop. :schockiert: Wie groß ist den das Programm? Ist das etwa größer als 2k - weil der Tiny24 hat nur 2k Programmspeicher. Für größere Programme müsste es dann der Tiny 44 (4k) oder Tiny 84 (8k) sein. :???:

kirby27b schrieb:
So aber nu gehts zur Kaffeetasse :D
:kaffee3: :kaffee:

Viele Grüße,
Thomas(_st)
 
OP
K

kirby27b

Geocacher
Hi,

ne das Programm wird bei mir mit 82% benutztem Programmspeicher angezeigt. Ich suche nur nach dem was die vielfältigen Fehlerbilder ( die bei mir bis auf die fehlerhafte DAT-Date nicht auftreten ) hier erklären könnte. Hab grad nochmal Testweise einen Fabrikneuen 24'er programiert und der macht genau was er soll, bzw. Was ich meine das er machen soll.

Grüße Olaf
 

jekejaerfi

Geocacher
so, ich verzweifele inzwischen. Ich bekomme die Funktion, neue Koordinaten durch Tasteneingabe nicht hin.
D.h. das Beispiel, dass ich neulich aus der Bascom-Referenz hier gepostet hatte, habe ich insofern abgeändert, dass ich die printbefehle durch Ausgabe von Zahlen auf dem Segment ersetzt habe. Das fünktioniert!Aber ich schaffe es nicht, dem dämlichen Tiny neue Zahlen zu übergeben.
Und heute hatte ich auch noch wieder einen tollen Effekt, den ich nicht nachvollziehen kann.
Ich hatte das (erste) Programm von Olaf etwas abgeändert, da ich andere Pins für die Ausgabe verwende (die ISP-Funktion will ich nicht, auch wenn ich mir so sicher den Sockel gespart hätte und nicht immer den Chip aus dem Gehäuse holen muss, wenn sich irgendwas geändert haben sollte). Nun wollte ich gezielt den Punkt nach den Minuten mit ausgeben. D.h. ich habe bei der entsprechenden Zahl der Liste einfach zusätzlich das Bit für den DP des Segmentes mit gesetzt. Aber merkwürdigerweise wird dies nicht mit ausgegeben.
Ich verwende nun A0, A1,A3,A4,A6,B0,B1 und B2 für das Display. A2 wird für den LDR benötigt.
Die Wahl der Pins kommt durch die Anordnung auf der Platine. Ich habe das Display zusammen mit dem LDR auf die Unterseite verfrachtet. Dadurch reduziert sich die Baugröße und ich habe kurze Leiterbahnen. Eine Platine habe ich nun auch bestückt und sie funktioniert bis auf den DP einwandfrei!

Schöne Grüße

Jens
 

stonewood

Geowizard
ksbender schrieb:
Auch wenn#s ein bischen off topic ist hier doch folgende Frage:
Bei mir liegen mittlerweile schon 4 Tinys 24 rum, die sich nicht mehr ansprechen lassen.
Ja, es läuft irgendetwas schief und ich habe keine Ahnung was da falsch ist.
Bekommt man mit dem AVR STK 500 die wieder zum Leben?
Brauche ich noch etwas zusätzliches? In der Beschreibung ist nicht von 14 Pin µc die Rede!!

Frage ist was an denen kaputt sein könnte:
- Wenn Du 'Reset enable' kaputtgefused hast geht keine ISP-Programmierung mehr, da muß ein sogenannter High Voltage Programmer ran. Der legt dann anstatt 0V 12V an den Reset-Pin (ja, das ist für HVP erlaubt!) und kann damit die Fuses wieder lesen und programmieren.
- Wenn der Tiny auf externen Oszillator gefused ist: Zweiten tiny nehmen, dem beibringen mit z.B. 1 Mhz '0' und '1' auszugeben und das als Takteingabe für den zu flashenden Tiny nehmen. Also quasi den zweiten Tiny als externe Taktquelle mißbrauchen.
- Wenn der Tiny auf 16Khz (128 Khz, /8) gefused wurde: $crystal runtersetzen, neu kompilieren (egal was, hauptsache läuft durch), dann schaltet Bascom die Programmiergeschwindigkeit entsprechend runter.

Es gibt da noch mehr sachen die man abschalten kann, wenn z.B. 'serial programming' aus ist geht das zumindest per SPI nicht mehr, 'Memory Lock' ist auch keine gute Idee und so weiter.
 

ksbender

Geocacher
So, folgender Zwischenstand bei mir:
Eingangsgrößen:
- selbst gebauter Programmer nach Kochbuch entsprechend auf ATTiny24 verdrahtet
- Bascom Version 1.11.8.7

Programmierung des Tiny´s funktioniert.
Ich habe einfach folgendes Programm geschrieben und getestet:
Code:
$regfile = "ATtiny24.DAT"
$crystal = 128000                                           'Frequenz des internen Oszillators
$hwstack = 20                                               'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
Config Adc = Single , Prescaler = Auto
Config Porta = &B10001011                                   'Pina.0, 1, 3, 7 auf Ausgang, Rest auf Eingang schalten
Config Portb = &B00000111                                   'Pinb.0 bis 2 auf Ausgang, Rest auf Eingang schalten


Porta = 0                                                   'Ausgänge auf low setzen
Portb = 0                                                   'Ausgänge auf low setzen

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


Do
Porta = &B10001011                                          'es leuchtet die 9
Portb = &B00000011
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001011                                          'es leuchtet die 8
Portb = &B00000111
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B00001011                                          'es leuchtet die 7
Portb = &B00000000
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001001                                          'es leuchtet die 6
Portb = &B00000111
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001001                                          'es leuchtet die 5
Portb = &B00000011
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B00001010                                          'es leuchtet die 4
Portb = &B00000011
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001011                                          'es leuchtet die 3
Portb = &B00000001
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10000011                                          'es leuchtet die 2
Portb = &B00000101
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B00001010                                          'es leuchtet die 1
Portb = &B00000000
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001011                                          'es leuchtet die 0
Portb = &B00000110
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Loop

Anschließend bin ich hingegangen und wollte mußte das Programm um das Einlesen vom LDR erweitern. Das ging auch soweit ganz gut. Die Variablen und Constanten hat er gefressen.
Keine Ausgabe gibt es, wenn ich die Zeile:
Ldr = Getadc(2)
einfüge.
Als Alternative läuft das Programm mit fest vorgegebenem Wert Ldr = 60 zumindest einmal durch.
Wie weiß der Tiny, daß ich gerne an seinem Pin 11 (PA2) den Wert einlesen will???
Wie ist da die Nomenklatur? Zum Beispiel für PA4????
Gruß
Stephan
 

Anhänge

  • DSCF.JPG
    DSCF.JPG
    72,6 KB · Aufrufe: 459

stonewood

Geowizard
ksbender schrieb:
Anschließend bin ich hingegangen und wollte mußte das Programm um das Einlesen vom LDR erweitern. Das ging auch soweit ganz gut. Die Variablen und Constanten hat er gefressen.
Keine Ausgabe gibt es, wenn ich die Zeile:
Ldr = Getadc(2)
einfüge.
Als Alternative läuft das Programm mit fest vorgegebenem Wert Ldr = 60 zumindest einmal durch.
Wie weiß der Tiny, daß ich gerne an seinem Pin 11 (PA2) den Wert einlesen will???
Wie ist da die Nomenklatur? Zum Beispiel für PA4????

Mit getadc(2) liest Du den A/D-Wert von Kanal (bzw. Multiplexer) 2 ein, also 'ADC2'. Konkret findest Du das Mapping der Portpins im Datenblatt, 'I/O-Ports, Alternate Port functions'. Da steht aber auch daß PA2 ADC2 ist. PA4 ist ADC4.

Übrigens steht das nicht im 'Analog to Digital Converter' - Kapitel ... :motz:
 

ksbender

Geocacher
@stonewood
stonewood schrieb:
Mit getadc(2) liest Du den A/D-Wert von Kanal (bzw. Multiplexer) 2 ein, also 'ADC2'. Konkret findest Du das Mapping der Portpins im Datenblatt, 'I/O-Ports, Alternate Port functions'. Da steht aber auch daß PA2 ADC2 ist. PA4 ist ADC4.

Übrigens steht das nicht im 'Analog to Digital Converter' - Kapitel ... :motz:

Stimmt, das steht so ungefähr auf Seite 64-66. Aber leider löst dein Hinweis mein Problem nicht :irre: :hilfe: :kopfwand:

Kommt Zeit kommt Rat.
Gruß
Stephan
 

ksbender

Geocacher
@Windi:
ja Wolfgang, sollte ich drin haben.
Ich stelle gerade mal alles vollständig zusammen.
Den von mir verwendeten Schaltplan, den Anschluß vom Programmer und das/die Programme die laufen bzw. nicht und nicht zu vergessen die Fuse-Bits
Gruß
Stephan
 

stonewood

Geowizard
Also das mal copy&paste aus dem Reaktivlicht-Code:
Code:
  Config Adc = Single , Prescaler = Auto                                        
[..]
   Start Adc                                                'A/D-Wandler start
   Ldr = Getadc(2)                                          'Helligkeitswert einlesen
   Stop Adc                                                 'A/D-Wandler zum Stromsparen wieder stoppen
Den 'Config Adc' sehe ich oben im Code, die Abfrage hattest Du nicht mit gepostet.

Übrigens kannst Du auch den 'Start Adc' ganz oben im Programm angeben. Das braucht dann natürlich dauerhaft Strom, aber so lange das noch auf dem Steckbrett passiert sollte das nicht so wild sein. ;)
 

ksbender

Geocacher
Ok, meine Vermutung liegt jetzt beim Anschluß des LDR incl. Widerstand.
Hier zunächst einmal der Schaltplan, mit dem o.g. Programm im Dauerlauf die Ziffern 9 herunter bis 0 blinken lies.
Achtung, ich habe nicht das richtige Symbol der 7 Segmentanzeige an gemeinsame Kathode gefunden. Die beiden A´s rechts oben im Symbol müssen eigentlich K´s sein.

Dann das entsprechende Layout auf dem Steckbrett:

Hier auch die Lock and Fuse Bits:

Und zum guten Schluß das Programm, was nicht funktioniert.
Code:
$regfile = "ATtiny24.DAT"
$crystal = 128000                                           'Frequenz des internen Oszillators
$hwstack = 20                                               'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
Config Adc = Single , Prescaler = Auto
Config Porta = &B10001011                                   'Pina.0, 1, 3, 7 auf Ausgang, Rest auf Eingang schalten
Config Portb = &B00000111                                   'Pinb.0 bis 2 auf Ausgang, Rest auf Eingang schalten


Porta = 0                                                   'Ausgänge auf low setzen
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(0)                                             '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


Morsen:
Porta = &B10001011                                          'es leuchtet die 9
Portb = &B00000011
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001011                                          'es leuchtet die 8
Portb = &B00000111
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B00001011                                          'es leuchtet die 7
Portb = &B00000000
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001001                                          'es leuchtet die 6
Portb = &B00000111
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001001                                          'es leuchtet die 5
Portb = &B00000011
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B00001010                                          'es leuchtet die 4
Portb = &B00000011
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001011                                          'es leuchtet die 3
Portb = &B00000001
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10000011                                          'es leuchtet die 2
Portb = &B00000101
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B00001010                                          'es leuchtet die 1
Portb = &B00000000
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Porta = &B10001011                                          'es leuchtet die 0
Portb = &B00000110
Waitms 2000
Porta = &B00000000
Portb = &B00000000
Waitms 2000

Return



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
Porta.1 = 1
Reset Watchdog
Powerdown
Porta.1 = 0
Schlafzaehler = 0
End If
Return

Wo habe ich den Fehler eingebaut?
 

Anhänge

  • LockandFuseBits.jpg
    LockandFuseBits.jpg
    89,9 KB · Aufrufe: 479
  • AT24_mit_Adapter2.jpg
    AT24_mit_Adapter2.jpg
    46,3 KB · Aufrufe: 465
  • DSCF141208.jpg
    DSCF141208.jpg
    164,3 KB · Aufrufe: 467

thomas_st

Geowizard
ksbender schrieb:
Wo habe ich den Fehler eingebaut?
Zumindest einen Fehler habe ich im Aufbau auf dem Steckbrett entdeckt: bei Dir sind R1 und der LDR in Reihe geschaltet und dann an Pin 11. Pin 11 gehört aber in den "Mittenabgriff" des Spannungsteilers R1 / LDR.

HTH,
Thomas(_st)

PS: Könntest Du mir bitte einen Gefallen tun und rechnest die Bilder etwas etwas herunter, bevor Du sie postest. Vielen Dank!
 
Oben