Sparrow-Apps: Licht und Sound         

      
Elektronik-Labor  Projekte  AVR Sparrow 



Video: http://youtu.be/9Jxa_NsiFFY

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 LottozahlengeneratorSparrowTV Demo und weitere Apps

Ein Video zum Sparrow-TV: http://youtu.be/CL2zniyIzac



Elektronik-Labor  Projekte  AVR Sparrow