Sparrow-Apps: Licht und Sound
Der
Sparrow wurde nun auf Pfostenstecker gesetzt und auf einer Steckplatine
verwendet. Die Betriebsspannung kann dann über die Steckplatine
angeschlossen werden. Bei Bedarf lassen sich andere Elemente wie
weitere LEDs oder ein Lautsprecher zusätzlich anschließen.
Zweiton-Sirene
Die
Zweiton-Sirene von Holger Fritzsch verwendet einen externen
Piezo-Schallwandler. Das Tonsignalwird über den CTC-Modus vom Timer 0
erzeugt. Der Ausgang ist dabei auf PB0 festgelegt. Da dies zugleich der
MOSI-Eingang für die Programmierung ist, darf der andere Anschluss des
Piezo-Summers nicht einfach an GND gelegt werden, weil er eine zu große
Kapazität von ca. 20 nF hat. Stattdessen legt man ihn an PB4. Zur
Laufzeit wird der Pin niederohmig auf GND gezogen, der Piezo
funktioniert. Tatü, Tata ... Beim Programmieren befindet sich der
Controller im Resetmodus und schaltet den Port B4 hochohmig. Der Piezo
liegt dann frei und kann die Programmierung nicht stören.
Download: Sparow_Sirene.zip
Direkt hochladen: http://tiny.systems/categorie/cheepit/ZweitonSirene.html
' 2- Ton- Sirene Version 1.1 H. Fritzsch 09 / 2014
' PortB.1 und PortB.3 --> blinkende LED's
' PortB.0 --> Piezo
'**********************************************************
$regfile "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 8
$framesize = 16
Config Portb = &B11111111 'PortB= Ausgang
Config Timer0 = Timer , Compare A = Toggle , Prescale = 8 , Clear Timer = 1 'CTC Mode aktiv
Const Ton1 = 170 'Ton1= ca 440 Hz
Const Ton2 = 128 'Ton2= ca 585 Hz
Dim Takt As Word ' Zählvariable
Do
Toggle Portb.1 ' Blink_Led1
Toggle Portb.3 ' BlinK_Led2
For Takt = 1 To 1700
Select Case Takt
Case 1 : Pwm0a = Ton1 ' Ton1 spielen
Case 700 : Pwm0a = Ton2 ' Ton2 spielen
Toggle Portb.3 ' Blink_Led2
Toggle Portb.1 ' Blink_Led1
End Select
Waitms 1
Next Takt
Loop
End
Der ewige Blinker
Den
ewigen Blinker gibt es schon ewig. Mal als reine Elektronik-Schaltung
und mal als Mikrocontroller-Anwendung "Der ELO-Flasher". Nun ist er
auch auf den Sparrow gekommen. Das Ziel ist extremes Stromsparen. Der
Sparrow erzeugt ein regelmäßiges Blitzen an der grünen LED, legt sich
aber in der Zwischenzeit schlafen und braucht dann fast keinen Strom.
Dass er wieder aufwacht, dafür sorgt der Watchdog-Timer des Tiny13. Der
Sparrow wurde hier über einen Speicherkondensator 0,1 F, 5,5 V
betrieben. Einmal auf 5 V aufgeladen blinkt er ein bis zwei Stunden lang vor
sich hin. Der Spatz ist mit Stromversorgung so klein, dass
man ihn sich ans T-Shirt heften kann.
Download: Sparrow_Ewiger_Blinker.zip
Direkt hochladen: http://tiny.systems/categorie/cheepit/EwigerBlinker.html
'ATtiny13 Sparrow Lowpower Flash - Ewiger Blinker
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Config Portb = 2
Led1 Alias Portb.1
Led2 Alias Portb.3
Config Watchdog = 1024
Start Watchdog
Led1 = 1
Waitms 10
Led1 = 0
Powerdown
End
Weißes Rauschen von Heinz D.
Der
Generator ist aus dem asm-Kurs 2013. Für lineare ! (Frequenzachse)
Messungen mit der Soundkarte bis 192kS/s (=96kHz) geeignet. Mit einem
guten Piezo sollte auch der US-Empfänger messbar sein. Das Programm ist
auf max. Geschwindigkeit getrimmt (~417kHz). Es kann ein 5-Bit-R2R
DA-Wandler verwendet werden. fo sinkt dann auf 417kHz/32=13kHz
zugunsten der analogen Auflösung (Informationsquader), ist jedoch für
die Messung von Spulen/Schwingkreisen usw. meist nicht nötig.
Download (update 8.10.14): WhiteNoise.zip
Direkt hochladen: http://tiny.systems/categorie/cheepit/Rauschgenerator.html ' 1407-White-Noise, aus dem asm-Kurs 2013
' der Ausgang ist jeder PortB.x
'
' Pseudo-Zufallszahlen = weisses Rauschen durch Simulation eines 22-Bit-
' Schieberegister mit EXOR-Rückkopplung der beiden rechten Bit.
' (alle Bit = 0 bei EXOR verboten, alle Bit = 1 bei EXNOR verboten!)
' 2^n-1 = 2^22-1 = 1 bis 4194304dez
' (mögliche Längen = n : 2, 3, 4, 6, 7, 15, 22, 60, 63, 127, 153, 532)
' In der Literatur wird das erste Bit mit Bit1 gezählt
' Im folgenden wird das erste Bit mit Bit0 bezeichnet
' fo=9,6MHz/2/11,5Cy ~417kHz, fu ~0,1Hz
'-------------------------------------------------------------------------------
$regfile = "attiny13.dat"
'$regfile = "attiny2313.dat"
'$regfile = "m8def.dat"
$asm
'.device Attiny13 ' für gavrasm
'.cseg ' Codesegment
'.org 0 ' für Adresse 0
Init:
' ldi r16, 128 ' clock prescaler
' Out Clkpr , R16 ' doc2535, T13, Seite 28
' ldi r16, 0 ' clock = clock / 1
' Out Clkpr , R16 ' (T13=9,6MHz)
nop ' wait
nop
nop
nop
ldi r16,255 ' 1Cy, R16 = 255 = SRG-Startwert
Out Ddrb , R16 ' 1Cy, PortB auf Ausgang
Main:
Out Portb , R16 ' 1Cy, Ausgabe
mov r24,r16 ' 1Cy, R24 <= R16, nur Bit0 von Interresse
ror r18 ' 1Cy, 23-16 nach rechts, Carry -> Bit23, Bit16 in Carry
ror r17 ' 1Cy, 15-8 nach rechts, Carry -> Bit15, Bit8 in Carry
ror r16 ' 1Cy, 7-0 nach rechts, Carry -> Bit7, Bit0 in Carry
eor r24,r16 ' 1Cy, temp EXOR R16, hier interessieren nur die rechten Bit0
ror r24 ' 1Cy, Bit0 in Carry schieben
brbs 0,eins ' 1,5Cy, wenn Carry=1 springe
andi r18,31 ' 1Cy, 0 ins Bit 21 schreiben 000xxxxx
rjmp Main ' 2Cy, nächster Schiebetakt
Eins: ' hier landen wir nur , wenn Carry=1 war
ori r18,32 ' 1Cy, 1 ins Bit 21 schreiben xx1xxxxx
rjmp Main ' 2Cy, nächster Schiebetakt
$end Asm ' =11,5Cyclen pro Durchlauf
'End
Nachtrag: Probleme mit 9,6 MHz, von Heinz D:
Mit Schrecken musste ich feststellen, das einige T13 unbemerkt verfust waren.
Die Ursache scheint die Umstellung der Deviderfuse am Anfang des Programm's
zu sein, weil es nur diese Programme betraf, obwohl das Datenblatt das
Vorgehen eindeutig beschreibt, Auszug, Seite 28:
' Bit 7 – CLKPCE: Clock Prescaler Change Enable
The CLKPCE bit must be
written to logic one to enable change of the CLKPS bits. The CLKPCE bit is
only updated when the other bits in CLKPR are simultaneously written to zero.
CLKPCE is cleared by hardware four cycles after it is written or when the
CLKPS bits are written. Rewriting the CLKPCE bit within this time-out period
does neither extend the time-out period, nor clear theCLKPCE bit.'
$asm
ldi r16, 128 ' clock
prescaler
Out Clkpr , R16 ' doc2535, T13,
Seite 28
ldi r16, 0 ' clock = clock /
1
Out Clkpr , R16 '
(T13=9,6MHz)
...
$end Asm
oder das gleiche alternativ in Bascom:
Clkpr = 128 '9,6 MHz
Clkpr
= 0
Clkpr = 0
Wer keinen HV-Programmierer besitzt, steht dann erst einmal im dunklen
Wald, Tiny ok, aber nicht mehr programmierbar. Man kann die Deviderfuse in
Bascom ganz leicht umstellen. Meine Programme werden zukünftig diese Zeilen
nicht mehr enthalten, bis die Ursache geklärt ist.
Antwort: Startup-Time von B. Kainka:
Ich bin auch über das Problem gestolpert, habe es
aber erst ganz falsch zugeordnet. Gerade habe ich ein paar Tests gemacht und
folgendes festgestellt:
Die Fuses sind nicht verändert, aber es kann
Probleme geben den Chip neu zu programmieren, wenn er vorher auf 9,6 MHz lief.
Irgendwie wird die Geschwindigkeit über Reset hinweg gehalten. Das war vorher
auch schon mal bei zu kleinen Taktraten aufgefallen (Energiesparen mit
dem Register CLKPR). Jedenfalls, Cheepit kommt
nicht mehr ran, aber das STK500 sehr wohl.
Zufällig ist noch was anderes
herausgekommmen: Es hängt auch von den Fuses ab, und zwar von der Startup-Time
65 ms oder nicht. Mit langer Startup-Time und 9,6 MHz gibt es Probleme, mit
kurzer Startup-Time nicht. Das bedeutet: Mit Fuses FF 6A klemmt Ihr Programm,
mit Fuses FF 62 klemmt es nicht. Ich vermute, an der Stelle müssen wir ansetzen.
Als erstes werde ich mal WhiteNoise mit 1,2 MHz laufen lassen, damit
nicht so viele drüber stolpern. Getestet, läuft immer noch sehr gut.
Problemlösung:
Mit der ursprünglichen Sparrow-Schaltung treten die Probleme
anscheinend nicht auf, sondern nur mit der Version 3. Diese Schaltung
ist wegen der steileren Flanken des Ausgangssignals vom Komparator
empfindlich gegen Übersprechen von Signalen. Ein Kondensator von 47 pF
zwischen B3 (SCK) und GND hilft (ISP-Soundinterface V3.2).
Da hilft der neue der Sparrow-Fuse-Editor http://tiny.systems/article/sparrowFuseEditor.html Mit
FF 6A kann man seinen Tiny13 in den Ausliefrungszusatnd zurückvesetzen.
Wer mit 9,6 MHz arbeiten will sollte FF 62 einstellen.
Tee-Timer, von Leander Hackmann
Hier
ein sehr einfacher Timer für bis zu 15 Minuten. Erst wird durch
permanentes Drücken auf S1 die Minutenanzahl eingestellt, die laufend
durch die grüne LED angezeigt wird. Wenn man über 15 Minuten kommt,
wird die Minutenanzahl wieder auf 1 zurückgesetzt. Druck auf S2 startet
den Timer, was auch durch minimales Aufblinken der roten LED zu sehen
ist. Wenn der Timer abgelaufen ist, blitzen beide LED heftig, bis man
S1 drückt und wieder an den Anfang gelangt. Durch die Einfachheit des
Programms ist zwar keine gute Genauigkeit gegeben, aber für grobe
Zeitmessungen reicht sie aus.
Download: Sparrow_Timer.zip
Direkt hochladen: http://tiny.systems/categorie/cheepit/TeeTimer.html
'Tee Timer
'Grober Timer für maximal 15 Minuten
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Config Portb = &B000011010
Dim Clk As Word
Dim Temp As Word
Led1 Alias Portb.1
Led2 Alias Portb.3
S1 Alias Pinb.0
S2 Alias Pinb.2
Start:
Clk = 0
Temp = 0
Do
If S1 = 0 Then
Clk = Clk + 1
End If
If Clk > 15 Then
Clk = 1
End If
If S2 = 0 Then
Exit Do
End If
If Clk > 0 Then
While Temp < Clk
Led1 = 1
Waitms 200
Led1 = 0
Waitms 200
Temp = Temp + 1
Wend
Temp = 0
Waitms 1000
End If
Loop
'Timer Schleife
Clk = Clk * 60
While Clk > 0
Waitms 1000
Led2 = 1 'Heartbeat
Clk = Clk - 1
Led2 = 0
Wend
Do
Led1 = 1
Led2 = 1
Waitms 50
Led1 = 0
Led2 = 0
Waitms 50
If S1 = 0 Then
Exit Do
End If
Loop
Goto Start
End
Der Sparrow-Sputnik
1957
sorgte der erste Sputnik für Aufsehen, der erste Satellit, der einfach nur
Tonsignale auf 20 MHz und 40 MHz aus dem All sandte. Der Sender war damals mit
Röhren bestückt und stellte seinen Dienst ein als die Batterien leer
waren. Genau 57 Jahre später ist der Sparrow-Sputnik gestartet, bestückt
mit einem stromsparenden Tiny13 und auf Mittelwelle 520 kHz (Welle 600 m,
wie man damals teilweise noch sagte). Der Spatz fliegt nicht so hoch und braucht
keine externe Antenne, hat aber auch keine große Reichweite, sondern setzt sich
direkt auf das Radio, aus dem er gehört werden möchte. Man legt ihn möglichst
nahe an die Ferritantenne. Das Sputnik-Signal erscheint auf etwa 520 kHz und
den Oberwellen 1040 kHz und 1560 kHz, alles plusminus ein paar Prozent. Der
"HF-Oszillator" besteht aus einer Programmschleife und schaltet LED1
in der höchsten möglichen Geschwindigkeit ein und aus. Nach jeweils 200
Schwingungen kommt eine Pause von 0,8 ms, sodass das ganze Signal mit rund 1 kHz
moduliert ist. Und auf diese Weise werden Impulspakete im Abstand von etwa
einer Sekunde erzeugt. Die Leitungen zur grünen LED auf der Platine bilden eine
Windung der Loop-Antenne und koppeln das Signal magnetisch auf den Ferritstab
des Radios. Piep, piep ... cheep, cheep ...
Achtung:
Auch diese App läuft mit 9,6 MHz und kann je nach Sparrow-Schaltung
(insbesondere bei Version 3) Probleme verursachen, die dazu führen
können, dass der nächste Programm-Upload misslingt. An einer
Lösung wird gearbeitet. Die Lösung bringt das ISP-Soundinterface V3.2.
Video: http://youtu.be/aczOE3Z5WxY
Download: Sparrow_Sputnik.zip
Direkt hochladen: http://tiny.systems/categorie/cheepit/Sputnik.html
'Sparrow_Sputnik.bas
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 4
$framesize = 4
Dim N As Byte
Dim M As Byte
Config Portb = &B00011111
Led1 Alias Portb.1
Led2 Alias Portb.3
Clkpr = 128 '9,6 MHz
Clkpr = 0
Clkpr = 0
Do
Led2 = 1
For M = 1 To 40
For N = 1 To 200 'ca. 520 kHz
Led1 = 1
Led1 = 0
Next N
Waitus 800 'ca 1 kHz AM
Next M
Led2 = 0
Waitms 900
Loop
End
Siehe auch: Der Lottozahlengenerator , SparrowTV Demo
und weitere Apps
Ein Video zum Sparrow-TV: http://youtu.be/CL2zniyIzac