
"Elbug", elektronisk telegrafnyckel.
- Mickecarlsson
- EF Sponsor
- Inlägg: 4812
- Blev medlem: 15 april 2017, 18:06:15
- Ort: Malmö
- Kontakt:
Re: "Elbug", elektronisk telegrafnyckel.
Snyggt !
Du har gått lödkursen ser jag dessutom.
Ha en trevlig helg och njut av ett gott arbete !
Du har gått lödkursen ser jag dessutom.
Ha en trevlig helg och njut av ett gott arbete !
Re: "Elbug", elektronisk telegrafnyckel.
Det beror på att jag är gammal, trött och virrig. Pinnen som styr tonen har en inverteringsring, då skall den ha inverterad signal... Nej, det skall den inte, för den heter /Reset... Signalen skall vara rättvänd. Hade en fungerande krets på labplatta, men gjorde ändå detta misstag. Det kunde varit fler och värre fel, men det känns ju ändå förargligt.
Re: "Elbug", elektronisk telegrafnyckel.
Det måste alltid vara minst ett fel på alla kort man får hem, det är sen gammalt 

Re: "Elbug", elektronisk telegrafnyckel.
Jätte snyggt! Fina kort och ett bra arbete!
Men bry dig inte om den inverterade signalen! Tänk på att allt verkar för att funka i övrigt!
Men bry dig inte om den inverterade signalen! Tänk på att allt verkar för att funka i övrigt!
Re: "Elbug", elektronisk telegrafnyckel.
Här kommer en till konstruktion. Efter Keyer2 blir det Keyer3, som är lite modernare och bara fungerar med moderna sändare där en låg positiv spänning skall nycklas.
Den har givetvis Iambic A/B och Ultimatic samt mellanrum. 7+1 texter kan lagras på tillsammans c:a 240+80 tecken i EEPROM/RAM. Text sänds med en enkel knapptryckning. Felslag kan rättas utan att ta om allt från början. Växla paddlarna om det behövs. Till/från på såväl medhörning som utgång till tx. Hastigheten ställs med en riktig analog vridpot.
Den kan "säga" aktuell hastighet och batterstatus. Automatisk till/från, bara att börja sända och ingen knapp att glömma på så batterierna dras ur. Då det är programvara och nästan halva flash är oanvänt är där plats för utökning och förbättring.
Finns en fungerande prototyp på veroboard, skall bli ett riktigt kort när mönstret är validerat och alla detaljer klara. Är lite osäkert kring val av kontaktdon. Även medhörning som jag tycker knäpper för mycket.
Den har givetvis Iambic A/B och Ultimatic samt mellanrum. 7+1 texter kan lagras på tillsammans c:a 240+80 tecken i EEPROM/RAM. Text sänds med en enkel knapptryckning. Felslag kan rättas utan att ta om allt från början. Växla paddlarna om det behövs. Till/från på såväl medhörning som utgång till tx. Hastigheten ställs med en riktig analog vridpot.
Den kan "säga" aktuell hastighet och batterstatus. Automatisk till/från, bara att börja sända och ingen knapp att glömma på så batterierna dras ur. Då det är programvara och nästan halva flash är oanvänt är där plats för utökning och förbättring.
Finns en fungerande prototyp på veroboard, skall bli ett riktigt kort när mönstret är validerat och alla detaljer klara. Är lite osäkert kring val av kontaktdon. Även medhörning som jag tycker knäpper för mycket.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: "Elbug", elektronisk telegrafnyckel.
Marta,
vad gör de 9 knapparna ? Jag trodde att en elbugg matades med ascii via rs.232
vad gör de 9 knapparna ? Jag trodde att en elbugg matades med ascii via rs.232
Re: "Elbug", elektronisk telegrafnyckel.
Knapparna är för att sända en llagrad text, eller göra inställningar. Ratten för att ställa in hur fort den skall sända.
När jag själv sänder med den används denna:
När jag själv sänder med den används denna:
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: "Elbug", elektronisk telegrafnyckel.
Ni är väl såååååååååå nyfikna på den här också...
Kod: Markera allt
[mono]
* 16f684
.pt pic-16
.bc
1 Vdd = + power
14 Gnd = - power, ground
13 ra0 = dit paddle
12 ra1 = dah paddle
11 ra2 = button group 0 input
4 ra3/mclr = /reset
3 ra4 = button group 1 input
2 ra5 = button group 2 input
10 rc0/an4 = button group 0 output, battery test input
9 rc1 = button group 1 output, battery test drive
8 rc2 = button group 2 output, speed pot drive
7 rc3/an7 = analog speed pot input
6 rc4 = output to transmitter driver
5 rc5/ccp1 = tone output
.ec
.or $0 bank 0 sfr definitions
idata .bs 1 ind. adr data reg
tmr0 .bs 1 timer 0
pcl .bs 1 program counter low
status .bs 1 status reg
iadres * alternate name for fsr (indirect address pnt)
fsr .bs 1 file select reg (indirect adr reg)
porta .bs 1 port a data
.bs 1
portc .bs 1 port b data
.bs 2 reserved
pclath .bs 1 program counter latch high
intcon .bs 1 master interrupt control
pir1 .bs 1 peripheral interrupt register 1 (irq flags)
.bs 1
tmr1l .bs 1 timer 1 low
tmr1h .bs 1 timer 1 high
t1con .bs 1 timer 1 control
tmr2 .bs 1 timer 2
t2con .bs 1 timer 2 control
ccpr1l .bs 1
ccpr1h .bs 1
ccp1con .bs 1
pwm1con .bs 1
eccpas .bs 1
wdtcon .bs 1 watchdog control
cmcon0 .bs 1
cmcon1 .bs 1
.bs 3 reserved
adresh .bs 1 upper bits of a/d
adcon0 .bs 1 a/d config
.or $80 bank 1 sfr definitions
.bs 1 idata
option .bs 1 mixed options select reg
.bs 1 pcl
.bs 1 status
.bs 1 fsr
trisa .bs 1 port a tristate control
.bs 1
trisc .bs 1
.bs 2 reserved
.bs 1 pclath
.bs 1 intcon
pie1 .bs 1 peripheral interrupt enable 1
.bs 1 reserved
pcon .bs 1
osccon .bs 1
osctune .bs 1
ansel .bs 1
pr2 .bs 1
.bs 2 reserved
wpua .bs 1
ioca .bs 1
.bs 2 reserved
vrcon .bs 1
eedat
eedata .bs 1 eeprom/flash-l data
eeadr
eeadres .bs 1 eeprom/flash-l address
eecon1 .bs 1
eecon2 .bs 1
adresl .bs 1 lower bits of a/d
adcon1 .bs 1 analog inputs config
z .eq status*8+2 zero flag bit adr
cy .eq status*8+0 carry flag bit adr
hc .eq status*8+1 half carry
bsela .eq status*8+5 bank select 0 bit adr
bselb .eq status*8+6 bank select 1 bit adr
gie .eq intcon*8+7 general interupt enable
peie .eq intcon*8+6 peripheral interrupt enable
t0ie .eq intcon*8+5 tmr0 interrupt enable
t0if .eq intcon*8+2 tmr0 interrupt flag
t1ie .eq pie1*8+0 tmr1 interrupt enable (bank 1)
t1if .eq pir1*8+0 tmr1 interrupt flag
ra2ie .eq intcon*8+4 ra2 interrupt enable
ra2if .eq intcon*8+1 ra2 interrupt flag
iocif .eq intcon*8+0 ioc interrupt flag
iocie .eq intcon*8+3 ioc interrupt enable
adon .eq adcon0*8+0 a/d enable
godone .eq adcon0*8+1 a/d start, finished flag
tmr2on .eq t2con*8+2 tmr2 on/off bit
eecon .eq eecon1 prom control
.rd .eq eecon*8+0 begin read, set to read
.wr .eq eecon*8+1 begin write, set to write
.wren .eq eecon*8+2 write enable, 1=enabled
inits * initialization values
.trisa .eq %_0011_1111 bank1 paddles + buttons + mclr as inputs
.trisc .eq %_0000_1000 bank1 analog pot as input
.wpua .eq %_0011_0111 bank1 wpu on paddles + buttons
.ioca .eq %_0011_0111 bank1 ioc on paddles + buttons
*.ansel .eq %_0010_1000 pot as analog, adc f/32
.ansel .eq %_1000_0000 bank1 all but pot digital
.adcon0 .eq %_0001_1101 an7 input + adc on
.adcon1 .eq %_0101_0000 bank1 adc frequency f/32
* for battery check
.triscb .eq %_0000_1010 bank1 analog pot as input
.anselb .eq %_1010_0000 bank1 all but pot digital
.adcon0b .eq %_0001_0101 an7 input + adc on
port
.dit .eq porta*8+0 dit input bit
.dah .eq porta*8+1 dah output bit
.btn0i .eq porta*8+2 button groups inputs
.btn1i .eq porta*8+4
.btn2i .eq porta*8+5
.btn0o .eq portc*8+0 button groups outputs
.btn1o .eq portc*8+1
.btn2o .eq portc*8+2
.pot .eq portc*8+3 speed pot analog input
.txout .eq portc*8+4 tx output
.tone .eq portc*8+5 tone output
pdlmask .eq %_0000_0011 paddles bitmask
btnmask .eq %_0011_0100 buttons mask
* a/d selections for adcon0
adpot .eq %_0_0_00_11_01 read input from pot
****** banked ram allocations
*
.or $20 variables are placed in bank0
config * saved config bytes
.mode .bs 1
.charsp .bs 1
.setflg .bs 1
.modec .bs 1
.charspc .bs 1
.setflgc .bs 1
speed .bs 1 speed in wpm
t1time * tmr1 values for 1 unit
.low .bs 1 low byte
.high .bs 1 high byte
.top .bs 1 top byte for constant
.rem .bs 1 reminder/wkgreg for div8
mode .eq config.mode mode#
.dit .bs 1 dit first state
.dah .bs 1 dah first state
.iamba .eq mode*8+0 bit0 automatically becomes an iambic a flag
charsp .eq config.charsp auto char space #
.state .bs 1 charsp. state
.achar .eq charsp*8+0 those bits of number automatically becomes flags
.aword .eq charsp*8+1
setflag .eq config.setflg settings bit flags
* flag addresses
.tone .eq setflag*8+0 1=tone on
.tx .eq setflag*8+1 1=tx output on
.pdlswp .eq setflag*8+2 1=swap paddles
.invout .eq setflag*8+3 1=inverted output
* !! bit7 used for default settings
* masks
.tonem .eq %0000_0001 1=tone off
.txm .eq %0000_0010 1=tx output off
.pdlswpm .eq %0000_0100 1=swap paddles
.invoutm .eq %0000_1000 1=inverted output
keyed .bs 1 the last sent code accumulates here
cmdnum .bs 1 command#
txcode .bs 1 code reg for autotx
autoact .bs 1 action# after autotx char
powtim .bs 1 power timer
bpad
.0 .bs 1
.1 .bs 1
.2 .bs 1
.3 .bs 1
.4 .bs 1
.5 .bs 1
timer .bs 1 unit timer
pdltou .bs 2 paddle touch accumulator, nxt byte for first touch
.dit .eq pdltou*8+0 bitflags for paddles
.dah .eq pdltou*8+1
.firdit .eq pdltou+1*8+0 first unit of a char
.firdah .eq pdltou+1*8+1
pdlnow .bs 1 paddle positions now
.dit .eq pdlnow*8+0 bitflags for paddles
.dah .eq pdlnow*8+1
pdlent .bs 1
.dit .eq pdlent*8+0 bitflags for paddles
.dah .eq pdlent*8+1
****** unbanked ram allocations
*
.or $70 variables are placed in common ram
pad00 .bs 1
pad0 .bs 1 pad location, not for irq
pad1 .bs 1
intsav * interrupt save
.a .bs 1
.stat .bs 1
.iadr .bs 1
flag .bs 1 func bit flags
.config .eq flag*8+0 in config mode
.button .eq flag*8+1 for button decoding
.record .eq flag*8+2 record keyed chars
.stpdir .eq flag*8+3 last step direction
.local .eq flag*8+4 local mode, always tone, no tx
.save .eq flag*8+5 waiting for key to save to
state .bs 1 current state, 0=idle
.hold .or 0
.idle .bs 1 idling
.dit .bs 1 sending plain dit
.dite .bs 1 ending plain dit
.dah .bs 1 sending plain dah
.dahe .bs 1 ending plain dah
.idit .bs 1 sending iambic a dit
.idite .bs 1 ending iambic a dit
.idah .bs 1 sending iambic a dah
.idahe .bs 1 ending iambic a dah
.ibdit .bs 1 sending iambic b dit
.ibdite .bs 1 ending iambic b dit
.ibdah .bs 1 sending iambic b dah
.ibdahe .bs 1 ending iambic b dah
.udit .bs 1 sending ultimatic dit
.udite .bs 1 ending ultimatic dit
.udah .bs 1 sending ultimatic dah
.udahe .bs 1 ending ultimatic dah
.uxdit .bs 1 sending ultimatic turnover dit
.uxdite .bs 1 ending ultimatic turnover dit
.uxdah .bs 1 sending ultimatic turnover dah
.uxdahe .bs 1 ending ultimatic turnover dah
.char .bs 1 char space
.word .bs 1 filling up to word space
.autodidah .bs 1 char element for autotx
.autotxe .bs 1 ending autotx unit
.autochar .bs 1 end of autotx char
.debounce .bs 1 buttons debounce wait
.or .hold
eepnt
.read .bs 1
.write .bs 1
.char .bs 1
.nt picwrite0.bin input file name used by flasher
.tf begin program file
.or 0
jmp start reset vector
nop fillers
nop
nop
jmp irqrtn irq vector
statjmp add pcl,a state machine dispatcher
jmp dummy idle idling
jmp dokeyup dit sending plain dit
jmp dodite dite ending plain dit
jmp dokeyup dah sending plain dah
jmp dodahe dahe ending plain dah
jmp dokeyup idit sending iambic a dit
jmp doidite idite ending iambic a dit
jmp dokeyup idah sending iambic a dah
jmp doidahe idahe ending iambic a dah
jmp dokeyup idit sending iambic b dit
jmp doidite idite ending iambic b dit
jmp dokeyup idah sending iambic b dah
jmp doidahe idahe ending iambic b dah
jmp dokeyup udit sending ultimatic dit
jmp doudite udite ending ultimatic dit
jmp dokeyup udah sending ultimatic dah
jmp doudahe udahe ending ultimatic dah
jmp dokeyup utdit sending ultimatic turnover dit
jmp douxdite utdite ending ultimatic turnover dit
jmp dokeyup utdah sending ultimatic turnover dah
jmp douxdahe utdahe ending ultimatic turnover dah
jmp dochar char char space wait
jmp doword word filling up to word space wait
jmp dokeyup autotx sendig autotx unit
jmp doautotxe autotxe ending autotx unit
jmp doautochar autochar end of autotx char
jmp dodebounce debounce buttons debounce wait
dummy rts dummy rtn
cmdtab * commands in config mode
add pcl,a
jmp dummy
jmp commands.info 7 speed, battery
jmp commands.tx 4 y/n
jmp commands.mode 1 none, iambic a/b, ultimatic
jmp commands.record 8 record text
jmp commands.swap 5 swap paddles y/n
jmp commands.space 2 none, auto char, auto word
jmp commands.exit 9 exit config mode
jmp commands.invert 6 invert output y/n
jmp commands.sound 3 y/n
jmp dummy
* 1 2 3 4 5 6 7 8 9
* 6 3 0 7 4 1 8 5 2
* 7 4 1 8 5 2 9 6 3
* 1 mode n/a/b/u
* 2 space n/c/w
* 3 sound y/n
* 4 tx y/n
* 5 swap y/n
* 6 inv y/n
* 7 s/b
* 8 record
* 9 command
rectab * commands in recording mode
add pcl,a
jmp dummy
jmp reccmd.save 7 save
jmp reccmd.5bkfw 4 5bkfw
jmp reccmd.1back 1 1back
jmp reccmd.play 8 play
jmp reccmd.insert 5 insert
jmp reccmd.1play 2 1play
jmp reccmd.end 9 end
jmp reccmd.delete 6 delete
jmp reccmd.1forw 3 1forw
jmp dummy
* 1 2 3 4 5 6 7 8 9
* 6 3 0 7 4 1 8 5 2
* 7 4 1 8 5 2 9 6 3
* 1 mode n/a/b/u
* 2 space n/c/w
* 3 sound y/n
* 4 tx y/n
* 5 swap y/n
* 6 inv y/n
* 7 s/b
* 8 record
* 9 command
* chars used to indicate settings
chars add pcl,a
.rl bt %10100000 n
.rl bt %01100000 a
.rl bt %10001000 b
.rl bt %00110000 u
.rl bt %10100000 n
.rl bt %10101000 c
.rl bt %01110000 w
.mode .eq 0
.char .eq 4
nums add pcl,a chars used to sound numbers
.rl bt %11111100 0
.rl bt %01111100 1
.rl bt %00111100 2
.rl bt %00011100 3
.rl bt %00001100 4
.rl bt %00000100 5
.rl bt %10000100 6
.rl bt %11000100 7
.rl bt %11100100 8
.rl bt %11110100 9
autosent * actions when autotx ends
lod a,autoact
add pcl,a
jmp autotx.finish just end
jmp autotx.ram send from ram
jmp autotx.rom send from rom
****** initialization routine
*
start * reset transfers here
* scrub bank0 ram
clf bsela bank 0
clf bselb
lod a,#$20 get ram base
lod iadres,a point at first byte to scrub
.scrub stz idata clear a byte of ram
inc iadres pnt to nxt
sbs iadres,7 at end?
jmp .scrub no-do nxt bt
jsr getcfg get settings
sbs setflag,7 was there saved settings?
jmp .nodef
lod a,#1 set defaults
lod mode,a
lod a,#1
lod charsp,a
lod a,#setflag.tonem+setflag.txm
lod setflag,a
.nodef jsr setup init calculated vars from settings
.bc
lod a,#state.idit
lod mode.dit,a
lod a,#state.idah
lod mode.dah,a
.ec
* init ports
lod a,#$07 shut down analog comparator
lod cmcon0,a
stz porta make all output pins low
stz portc
sef bsela bank1
lod a,#inits.trisa set port directions
lod trisa,a
lod a,#inits.trisc
lod trisc,a
lod a,#inits.ansel select analog inputs, adclk=fosc/32
lod ansel,a
lod a,#inits.wpua weak pull-ups on paddle
lod wpua,a
lod a,#inits.ioca int on change on paddle
lod ioca,a
rmb option,7 enable wpu
clf bsela bank 0
stz porta redo after tris is set
stz portc
* prepare a/d
sef bsela
lod a,#inits.adcon1
lod adcon1,a
clf bsela
lod a,#inits.adcon0
lod adcon0,a
* prepare for tone by using pwm odule
lod a,#$0c setup for pwm
lod ccp1con,a
lod a,#104/2
lod ccpr1l,a
sef bsela bank1
lod a,#104 about 600 hz tone
lod pr2,a
clf bsela bank0
lod a,#$02 /16 prescaler, tmr2 off
lod t2con,a
* check for and do master reset
sfc port.btn0i two reset buttons hold?
jmp .nores
sfc port.btn2i
jmp .nores
stz eepnt.write yes, setup for eeprom reset
stz pad0
.reset lod a,#-1 get all bits set
jsr eeprom.write clear and inc
dsz pad0 do all bits
jmp .reset
jmp @ do forever
.nores
* start up interrupts
lod a,#$31 config tmr1
lod t1con,a
sef bsela bank 1
sef t1ie set tmr1 interrupt enable flag
clf bsela bank0
clf iocif clear ioc flag
sef iocie enable ioc
sef peie enable peripheral interrupts
clf t1if clear tmr1 interrupt flag
sef gie enable master interrupt flag
jmp @ do forever, all done as interrupts
****** interrupt routine
*
irqrtn lod intsav.a,a save accumulator
swn a=status nibble swap and get status
lod intsav.stat,a save status
clf bsela set bank0
lod a,porta get paddles
lod pad00,a keep them
and a,#$fc clear paddle bits
sbr pad00,0 get tem swapped
orr a,#$02
sbr pad00,1
orr a,#$01
sfc setflag.pdlswp set to swap?
lod pad00,a yes, store swapped
sfc t1if timer 1 int?
jmp t1irq yes
* must be ioc, paddle or button
*lod a,porta get inputs
*lod pad00,a put it in memory
lod a,pad00 get inputs
clf iocif clear intflag
and a,#btnmask buttons?
eor a,#btnmask
sfs z
jmp entcmd yes
lod a,pad00 get back input
and a,#pdlmask mask out paddle bits
eor a,#pdlmask invert them so 1=pressed
tfz pdltou first touch?
sfc z
lod pdltou+1,a yes, set first touch
orr pdltou,a accumulate paddle touch's
lod a,state idling?
sfs z
jmp .pdldon no
jsr begin yes, begin a new char segment
stz pdlent never already pressed on first unit
.pdldon clf iocif clear flag
irqdon swn a=intsav.stat nibble swap (undo prv swap) and get status
lod status,a restore status
swn intsav.a nibble swap..
swn a=intsav.a ..allowing restore by swn to preserve status
rti irqrtn done
entcmd *sfc flag.cmdmod already in cmd mode?
*jmp irqdon yes, exit
tfz state idling?
sfs z
jmp irqdon no, exit
*sef flag.cmdmod enter command mode
lod a,#$fe reload timer, short wait
lod tmr1h,a
stz tmr1l
clf t1if clr intflag
lod a,#1 just 1 wait
lod timer,a
lod a,#state.debounce start debounce wait
lod state,a
jmp irqdon done
t1irq * timer 1
lod a,t1time.high reload timer
lod tmr1h,a
lod a,t1time.low
lod tmr1l,a
clf t1if clr intflag
tfz timer idling?
sfc z
jmp .idle yes, do nothing but read pot
stz powtim clear power timeout
dsz timer count down unit timer
jmp .speed not expired, do nothing
*lod a,porta get present inputs
lod a,pad00 get present inputs
and a,#pdlmask mask out paddle bits
eor a,#pdlmask invert them so 1=pressed
lod pdlnow,a store paddle positions
lod a,state do state machine
jsr statjmp
.speed sef port.btn2o rise pot voltage
nop give some time to settle
nop
sef godone start conversion
.wait sfc godone a/d done?
jmp .wait no, wait
clf port.btn2o done, remove pot voltage
lod a,adresh get result
lod pad00,a set speed as result/8
clf cy
ror pad00
clf cy
ror pad00
clf cy
ror a=pad00
add a,#5 minimum 5 wpm
eor a,speed changed?
sfc z
jmp irqdon no, skip div8
eor speed,a set new wpm
jsr div8 set timer init values
jmp irqdon done
.idle lod a,#200 set fixed timer
lod tmr1h,a
stz tmr1l
dsz powtim count down power off timer
jmp .speed not expired
slp power off and wait
jmp irqdon released by an irq, resume
****** begin a new char segment
*
begin
lod a,t1time.high reset timer..
lod tmr1h,a
lod a,t1time.low
lod tmr1l,a
clf t1if ..and clr intflag
lod a,#1 clear last keyed code
lod keyed,a
sfs pdltou.dit dit touched?
jmp .trydah no
lod a,mode.dit state is dit
jmp txdit keydown and exit
.trydah sfs pdltou.dah dah touched?
rts no, do nothing
lod a,mode.dah state is dah
jmp txdah keydown and exit
****** turn on/off tx and tone
*
txon
sfc flag.local local mode?
sef tmr2on yes, force tone
sfc setflag.tone tone on?
sef tmr2on yes, turn on tone
sfc flag.local local mode?
rts yes, no tx, done
sfc setflag.tx tx on?
sef port.txout yes, keydown tx
rts done
txoff
clf port.txout keyup tx
clf tmr2on turn off tone
rts done
txall lod state,a set state
tfz state idle?
sfc z
jmp charend yes, do nothing
eor a,#state.char auto charspace?
sfc z
jmp txsp yes
eor a,#state.char restore state
sbr state,1 dit state, skip
jmp txdah it was a dah state
txdit lod state,a set state
lod a,pdlnow set paddle pos at entry
lod pdlent,a
lod a,#1 one time unit
lod timer,a
clf cy accumulate code
rol keyed
jmp txon keydown and exit
txdah lod state,a set state
lod a,pdlnow set paddle pos at entry
lod pdlent,a
lod a,#3 three time units
lod timer,a
sef cy accumulate code
rol keyed
jmp txon keydown and exit
txsp lod a,#2 two more units of silence
lod timer,a
charend
sfc flag.record record keyed chars?
jmp record yes, then exit
rts no, just exit
****** routines for state machine
* named as the corresponding state, preceeded with do
*
dokeyup * the keydown period has ended, unit space begins
inc state nxt state is always ending the unit
lod a,#1 1 unit pause
lod timer,a
jmp txoff keyup and exit
dochar * char space has ended
cla default to idle
sfc pdltou.firdit dit waiting? those two are mutually exclusive
lod a,mode.dit yes
sfc pdltou.firdah dah waiting
lod a,mode.dah yes
sfs z paddle touched?
jmp txall yes, send the unit
sfs charsp.aword auto wordspace?
jmp txall no, end into idle
lod a,#4 four more units
lod timer,a
lod a,#state.word state is word space wait
lod state,a
rts done
doword * word spacing has ended
cla default to idle
sfc pdltou.firdit dit waiting? those two are mutually exclusive
lod a,mode.dit yes
sfc pdltou.firdah dah waiting
lod a,mode.dah yes
jmp txall
rts
** a unit has ended, next unit starts
dodite
lod a,charsp.state get default auto charspace or idle
sfc pdlnow.dah next may be dah
lod a,#state.dah
sfc pdlnow.dit still dit?
lod a,#state.dit yes-keep it going
stz pdltou reset toush
stz pdltou+1 also first toush
jmp txall
dodahe
lod a,charsp.state get default auto charspace or idle
sfc pdlnow.dit next may be dit
lod a,#state.dit
sfc pdlnow.dah still dah?
lod a,#state.dah yes-keep it going
stz pdltou reset toush
stz pdltou+1 also first toush
jmp txall
doidite
lod a,charsp.state get default auto charspace or idle
sfc pdlent.dah
sfs mode.iamba mode a or b?
jmp .iambb it is b
tfz pdlnow in mode a, both released means stop
sfc z both released?
stz pdltou yes, stop
.iambb sfc pdlnow.dit still dit?
lod a,#state.idit yes-keep it going
sfc pdltou.dah was dah touched?
lod a,#state.idah yes, switch to dah
sfc pdlnow.dah is dah hold?
lod a,#state.idah yes, switch to dah
clf pdltou.dit reset dit toush
stz pdltou+1 also first toush
jmp txall
doidahe
lod a,charsp.state get default auto charspace or idle
sfc pdlent.dit
sfs mode.iamba mode a or b?
jmp .iambb it is b
tfz pdlnow in mode a, both released means stop
sfc z both released?
stz pdltou yes, stop
.iambb sfc pdlnow.dah still dah?
lod a,#state.idah yes-keep it going
sfc pdltou.dit was dit touched?
lod a,#state.idit yes, switch to dit
sfc pdlnow.dit is dit hold?
lod a,#state.idit yes, switch to dit
clf pdltou.dah reset dah toush
stz pdltou+1 also first toush
jmp txall
doudite
lod a,charsp.state get default auto charspace or idle
sfc pdlnow.dit still dit?
lod a,#state.udit yes-keep it going
sfc pdltou.dah was dah touched?
lod a,#state.uxdah yes, switch to dah
stz pdltou reset toush
stz pdltou+1 also first toush
jmp txall
doudahe
lod a,charsp.state get default auto charspace or idle
sfc pdlnow.dah still dah?
lod a,#state.udah yes-keep it going
sfc pdltou.dit was dit touched?
lod a,#state.uxdit yes, switch to dit
stz pdltou reset dah toush
stz pdltou+1 also first toush
jmp txall
douxdite
lod a,charsp.state get default auto charspace or idle
sfc pdlnow.dah is dah pressed?
lod a,#state.udah yes, default to dah
sfs pdlnow.dit still dit?
jmp .nodit
lod a,#state.uxdit yes-keep it going
sfs pdlnow.dah is dah pressed?
lod a,#state.udit no, state is first press dit
.nodit stz pdltou reset dit toush
stz pdltou+1 also first toush
jmp txall
douxdahe
lod a,charsp.state get default auto charspace or idle
sfc pdlnow.dit is dit pressed?
lod a,#state.udit yes, default to dah
sfs pdlnow.dah still dah?
jmp .nodah
lod a,#state.uxdah yes-keep it going
sfs pdlnow.dit is dah pressed?
lod a,#state.udah no, state is first press dah
.nodah stz pdltou reset dit toush
stz pdltou+1 also first toush
jmp txall
record jmp save2ram.input
****** setup timer start values and first state of a new char being keyed
*
setup jsr div8 setup timer1 divisor for selected speed
lod a,#state.idle assume no charspace
tfz charsp use auto char?
sfs z
lod a,#state.char yes
lod charsp.state,a set spacing state
clf cy
rol a=mode *2
lod pad0,a
add a,pad0 *4
add a,#1 +1
lod mode.dit,a set dit state
add a,#2 dah is always two above
lod mode.dah,a set dah state
rts
****** set timer1 start count from wanted speed in wpm
* code from piclist.com
* divides the divisor, that gives 1 wpm, with speed
* complements the result as timer is an up counter
*
************************************************************
*Unsigned 24 bit by 8 bit divide routine
* This is basically Nikolai Golovchenko's
* Thanks to Nikolai for the original post.
** James Hillman, 2 December 2005
************************************************************
div8
lod a,#$f0 setup constant dividend 150000
lod t1time.low,a this is #tick/second times 1.2
lod a,#$49 divide by wpm gives divisor
lod t1time.high,a
lod a,#$02
lod t1time.top,a
stz t1time.rem clrf x+3 *remainder
lod a,#24 movlw d'24'
lod pad0,a movwf counter
.nxt
rol a=t1time.low rlf x,w *shift dividend left to move next bit to remainder
rol t1time.high rlf x+1,f *
rol t1time.top rlf x+2,f *
rol t1time.rem rlf x+3,f *shift carry (next dividend bit) into remainder
rol t1time.low rlf x,f *finish shifting the dividend and save carry in x.0,
*since remainder can be 9 bit long in some cases
*this bit will also serve as the next result bit.
lod a,speed movf y,w *substract divisor from 8-bit remainder
sub t1time.rem,a subwf x+3,f
*here we also need to take into account the 9th bit of remainder, which
*is in x.0. if we don't have a borrow after subtracting from
*8 bits of remainder, then there is no borrow regardless of 9th bit
*value. but, if we have the borrow, then that will depend on 9th bit
*value. if it is 1, then no final borrow will occur. if it is 0, borrow
*will occur. these values match the borrow flag polarity.
sfc cy btfsc status,0 *if no borrow after 8 bit subtraction
smb t1time.low,0 bsf x,0 *then there is no borrow in result. overwrite
*x.0 with 1 to indicate no borrow.
*if borrow did occur, x.0 already
*holds the final borrow value (0-borrow,
*1-no borrow)
sbs t1time.low,0 btfss x,0 *if no borrow after 9-bit subtraction
add t1time.rem,a addwf x+3,f *restore remainder. (w contains the value
*subtracted from it previously)
dsz pad0 decfsz counter,f
jmp .nxt goto loopu248
not t1time.low complement divisor for timer1
not t1time.high dont bother wit 2-komplement
* inc t1time.low
* sfc z
* inc t1time.high
rts return
****** transmits stored single char or text string
*
autotxchar
jsr chars get charcode and fall through
autotx lod txcode,a init code to send
lod a,t1time.high reset timer..
lod tmr1h,a
lod a,t1time.low
lod tmr1l,a
clf t1if ..and clr intflag
*lod a,#state.autodidah
.begin lod a,#state.autotxe state is autotxe to begin the char
lod state,a
lod a,#3 three units initial wait
lod timer,a
rts
.bc
clf cy
rol txcode test for word space
tfz txcode
sfs z
jmp doautotxe.first enter tx loop
lod a,#4 word space, add 4 unit os silence
jmp doautotxe.endw set timer and state, exit
.ec
** just finish sending
.finish stz state state is idle
sfc flag.config config?
rts yes
sfc flag.record record?
rts yes
clf flag.local standard mode, clear local
rts all done
** send from ram
.ramstart
* lod a,#$40 set start adr
lod iadres,a
lod a,idata load first char
lod txcode,a
jsr incram nxt pos
lod a,#1
lod autoact,a
jmp autotx.begin start sending
.ram lod a,#$70 failsafe
eor a,iadres
sfc z
jmp doautotxe.stop
lod a,idata get char
sfc z null is end
jmp doautotxe.stop
lod txcode,a
jsr incram nxt adr
lod a,#%00100100
eor a,txcode
sfc z
jmp .word
jmp doautotxe continue sending
** send from rom
.romstart
*lod a,#0
*lod eepnt.read,a
jsr eeprom.read load first char
lod txcode,a
inc eepnt.read nxt pos
lod a,#2
lod autoact,a
jmp autotx.begin start sending
.rom
jsr eeprom.read get char
inc eepnt.read nxt adr
orr a,#0
sfc z null is end
jmp doautotxe.stop
*jmp .finish at end, finish
lod txcode,a
eor a,#%00100100
sfc z
jmp .word
jmp doautotxe continue sending
.word lod a,#4 fill up to 7 units pause for word space
jmp doautotxe.endw
doautotxe
clf cy
rol txcode shift out a unit
tfz txcode
sfc z at end?
jmp .end yes
.first lod a,#state.autodidah state is autodidah
sfc cy dit or dah?
jmp txdah
jmp txdit
.stop stz autoact action is none
.end lod a,#2 charspace, two more units silence
.endw lod timer,a
lod a,#state.autochar state is autochar
lod state,a
rts done
doautochar
tfz pdltou touched?
sfs z
jmp .stop yes, stop sending
lod a,autoact get action#
jmp autosent do it
.stop stz autoact stop sending
stz state state is idle
stz pdltou clear the touch
jmp autotx.finish stop sending
****** button debounce wait has ended
*
dodebounce
stz state state is idle
jsr getbtn scan buttons
add a,#1 make it 1-relative
sfc flag.save waiting for save key??
jmp txt2prom yes, save at selected key
sfc flag.record recording mode?
jmp rectab yes, do the rec command
sfc flag.config config mode?
jmp cmdtab yes, do the config command
eor a,#7 enter command mode?
sfc z
jmp .entcfg yes
eor a,#7 get back btn
eor a,#4 enter command mode?
sfc z
jmp .txram yes
eor a,#4 get back btn
jsr eescan
sfc z
jmp autotx.romstart
lod a,#%00110010
jmp autotx
.entcfg sef flag.config enter config mode
sef flag.local local sounding
stz cmdnum clear prev command
lod a,#%01010000 get r
jmp autotx sound it and done
.txram lod a,#$40
jmp autotx.ramstart
****** do a command
*
commands
** step between modes
.mode
eor cmdnum,a first keypress?
lod cmdnum,a set last cmdnum
sfc z first keypress, no change
inc mode nxt mode
sbr mode,2 four means rollover to zero
stz mode
jsr setup set initial states for dit/dah
lod a,mode get current mode
jsr chars get indicator char
jmp autotx sound it and exit
** step between word spaces
.space
eor cmdnum,a first keypress?
lod cmdnum,a set last cmdnum
sfc z first keypress, no change
inc charsp nxt alternative
lod a,charsp rollover?
sur a,#2
sfs cy
stz charsp yes
jsr setup set state following a keyed char
lod a,charsp get setting
add a,#chars.char add offset to indicators
jsr chars get indicator
jmp autotx sound it and exit
*jmp autotx.ramstart
** turn buzzer on/off
.sound
eor cmdnum,a same as last?
lod cmdnum,a set last cmdnum
lod a,#setflag.tonem get bitmask for tone
jmp .toggle do toggle
** turn tx on/off
.tx
eor cmdnum,a same as last?
lod cmdnum,a set last cmdnum
lod a,#setflag.txm get bitmask for tx
jmp .toggle do toggle
** swap paddles
.swap
eor cmdnum,a same as last?
lod cmdnum,a set last cmdnum
lod a,#setflag.pdlswpm get bitmask for inverted paddles
jmp .toggle do toggle
** invert tx output, removed, burns power when off
.invert
eor cmdnum,a same as last?
lod cmdnum,a set last cmdnum
lod a,#setflag.invoutm get bitmask for inverrted tx
jmp .toggle do toggle
** tell speed and battery status
.info * 45 512 2 batt 31 540 3 batt
lod a,#$af point close to end of ram
lod iadres,a
stz idata truncate evental long text
inc iadres
lod a,speed get speed
jsr .putnum put as morse
inc iadres keep word space
jsr ckbatt get battery status
lod a,pad0
jsr .putnum put as morse
jsr findblank get first blank
lod a,eepnt.read
sur a,#$fb subtract from available space
add a,#-80 over 80?
sfs cy
jmp .not80 no
stz idata yes, put end marker
jmp .txinfo
.not80 add a,#80 was short, get back length
inc iadres keep word space
jsr .putnum put as morse
stz idata put end marker
.txinfo lod a,#$b0 sound it locally
jmp autotx.ramstart
** enter recording mode
.record jmp save2ram.start init recording
** exit config
.exit
jsr savcfg
clf flag.config exit config mode
*clf flag.local exit local sounding
lod a,#%01010100 get +
jmp autotx sound and exit
** utility, toggle 1-bit setting
.toggle sfc z first keypress, no change
eor setflag,a do toggle
and a,setflag test status
lod a,#%10111000 assume on, get y
sfc z on or off?
lod a,#%10100000 was off, get n
jmp autotx sound it and done
.putnum * perform simple div by 10
stz idata used for quotingent
.nxt inc idata bump it
add a,#-10 subtract 10
sfc cy turn over?
jmp .nxt no, go on
dec idata yes, undo last sub
add a,#10
jsr nums reminder to morse
lod pad0,a
lod a,idata quot to morse
jsr nums
lod idata,a
inc iadres
lod a,pad0
lod idata,a
inc iadres
lod a,#%00100100
lod idata,a end marker
rts
****** recording commands
*
reccmd
.1back clf flag.stpdir set last dir
jsr decram 1 back, fallthrough and play
.1play lod a,idata get char at current pos
jmp autotx play one char, no move
.1forw sef flag.stpdir set last dir
tfz idata at end?
sfs z yes, no inc
jsr incram 1 forw..
jmp .1play .. and play
.5bkfw sfs flag.stpdir what direction?
jsr decram5
sfc flag.stpdir
jsr incram5
jmp .1play
.insert jmp insert
.delete jmp delete
.play
lod a,#$40 get start adr
jmp autotx.ramstart start playing
.save sef flag.save setup for save
lod a,#%01000000 sound a dit and exit
jmp autotx
.end
clf flag.record exit record
clf flag.config exit config
lod a,#%01010100 sound +
jmp autotx
save2ram
.start lod a,#$40 set start adr
lod iadres,a
sef flag.record setup for input
lod a,#%11100010 send col and finish
jmp autotx
.input * adjust received char for autotx
lod a,idata keep char at current pos
lod pad1,a
sef cy get end bit
.nxt rol keyed shift in
sfc cy char in position?
jmp .adjdon yes, adj done
clf cy fill with zeroes
jmp .nxt do nxt bit
.adjdon lod a,keyed get adj char
lod idata,a save it
jsr incram inc and adjust ram adr
tfz pad1 was an end mark overwritten?
sfc z no, leave nxt char as is
stz idata yes, put a new end marker
lod a,#$bf end of ram?
eor a,iadres
sfs z
jmp .done no done
.end stz idata always end mark
clf flag.record
lod a,#%01010100 send + as and marker
jmp autotx
.done *lod a,#%01000000
*jmp autotx
stz state
rts
incram5 jsr incram 4+1 pos forward
jsr incram
jsr incram
jsr incram
incram tfz idata at end?
sfc z
rts yes, no inc
inc iadres nxt pos
lod a,#$70 bank turnover reached
eor a,iadres
lod a,#0 assume no turnover
sfc z at turnover?
lod a,#$30 yes, get skip distance
add iadres,a do ev. skip
lod a,#-$bf end of ram?
add a,iadres cy set if so
lod a,#$bf stop overflow
sfc cy
lod iadres,a
rts
decram5 jsr decram 4+1 pos backward
jsr decram
jsr decram
jsr decram
decram dec iadres prev pos
lod a,#$9f bank turnover reached
eor a,iadres
lod a,#0 assume not at turnover
sfc z at turnover?
lod a,#$-30 yes, get skip distance
add iadres,a do ev. skip
lod a,#-$40 before beg of ram?
add a,iadres cy not set if so
lod a,#$40 stop underflow
sfs cy
lod iadres,a
rts
insert lod a,iadres keep current pos
lod bpad.2,a
lod a,#%10000110 set filler
lod bpad.0,a
.nxt lod a,idata get current char
lod bpad.1,a keep it
lod a,bpad.0 get prev char
lod idata,a put it as new char
sfc z was it zero?
jmp .end yes, done
lod a,bpad.1 get kept char
lod bpad.0,a put it as new previous
jsr incram nxt pos
sfs cy at end of ram
jmp .nxt no, do nxt
stz idata force end
lod a,#%01010110 sound . as overflow marker
jmp autotx
.end lod a,bpad.2 restore pos
lod iadres,a
lod a,idata get current char
jmp autotx sound it and done
delete lod a,iadres keep current pos
lod bpad.2,a
eor a,#$40 on very first pos?
sfc z
stz idata yes, clear text
.nxt tfz idata on end mark?
sfc z
jmp .end yes, done
jsr incram nxt pos
lod a,idata get char
lod bpad.0,a keep it
jsr decram prev pos
lod a,bpad.0 get char
lod idata,a put it
jsr incram nxt pos
jmp .nxt do nxt char
.end lod a,bpad.2 restore pos
lod iadres,a
lod a,idata get current char
jmp autotx sound it and done
txt2prom * copy text to eeprom
clf flag.save clear save flag
lod bpad.0,a keep pressed key
eor a,#7 key7 is no no
sfc z
jmp .error
eor a,#3 same goes for 4, yes 3 is 4 eor 7
sfc z
jmp .error
lod a,bpad.0 get wanted txt#
jsr eescan already used?
sfc z
jsr eeremove yes, remove it
jsr findblank
sfc z busted?
jmp .busted yes
stz pad0 init limit count
lod a,eepnt.read set start adr
lod eepnt.write,a
lod a,#$40 set start adr in ram
lod iadres,a
tfz idata text present?
sfc z
jmp .end no, just exit with prev text cleared
lod a,bpad.0 get key
jsr eeprom.write write text id
eor a,#$fb hit end?
sfc z
jmp .busted yes, busted
.nxt lod a,idata get char
jsr eeprom.write write it
eor a,#$fb hit end
sfc z
jmp .busted yes, busted
lod a,idata at end?
sfc z
jmp .end yes
jsr incram nxt pos
dsz pad0 eeprom safety count
jmp .nxt do nxt
* rts
.end lod a,#-1
jsr eeprom.write put end marker
lod a,#%01010100
clf flag.record
clf flag.config
jmp autotx
.error lod a,#%00110010
jmp autotx
.busted lod a,#0 force end
jsr eeprom.write
lod a,#%10001000
clf flag.record
clf flag.config
jmp autotx
findblank
stz eepnt.read find first blank
.nxtbl jsr eeprom.read read char
eor a,#-1 blank?
sfc z
jmp .blank yes
inc eepnt.read no, try nxt
lod a,#$fb at end?
eor a,eepnt.read
sfc z
rts
jmp .nxtbl
.blank lod a,#$fb busted?
eor a,eepnt.read
rts
****** find first unused, or start of a text, in eeprom
*
eescan lod eepnt.char,a set text# to scan for
stz pad0 init limit count
stz eepnt.read start from beginning
.nxt jsr eeprom.read get char
inc eepnt.read pnt at nxt
eor a,eepnt.char found?
sfc z
rts yes, done
.nxt0 jsr eeprom.read get char
inc eepnt.read nxt adr
orr a,#0 test for zero
sfc z
jmp .nxt found, try text#
dsz pad0 limit count
jmp .nxt0 try nxt
clf z
rts stop at limit
.endpos stz pad0 init limit count
stz eepnt.read start from beginning
dec eepnt.read
.nxtend inc eepnt.read
jsr eeprom.read read from eeprom
eor a,#-1 found blank?
sfc z
rts yes, done
dsz pad0 limit count
jmp .nxtend do nxt
rts at limit, done
eeremove
dec a=eepnt.read get first adr in txt to delete
lod eepnt.write,a set it as write adr
stz pad0 init limit count
.skip jsr eeprom.read read prom
inc eepnt.read nxt adr
orr a,#0 test for zero
sfs z
jmp .skip found zero = end of text
.nxtmov jsr eeprom.read read char
lod pad1,a
jsr eeprom.write write and auto inc
inc eepnt.read inc read adr
inc a=pad1 at blank = -1?
sfc z
rts yes, done
dsz pad0
jmp .nxtmov no, move nxt
rts fail, eeprom protection break
****** scan buttons and get result in a, 9=fail
*
getbtn
stz pad1 clr button counter
sef port.btn1o raise lin 1 and 2
sef port.btn2o
jsr .test test line 0
sfc flag.button
jmp .end found, end it
sef port.btn0o test line 1
clf port.btn1o
jsr .test
sfc flag.button
jmp .end
sef port.btn1o test line 2
clf port.btn2o
jsr .test
.end clf port.btn0o lower all lines
clf port.btn1o
clf port.btn2o
lod a,pad1 get result
rts all done
.test sef flag.button assume found
sfs port.btn0i pressed?
rts yes, test done
inc pad1 no, inc to nxt button
sfs port.btn1i do nxt...
rts
inc pad1
sfs port.btn2i
rts
inc pad1
clf flag.button test failed
rts
eeprom
.write sef bsela banksel eecon1
lod eedata,a set data
lod a,eepnt.write
inc eepnt.write
lod eeadres,a set address
sef eecon.wren bsf eecon1,wren ;enable write
* bcf intcon,gie ;disable ints
* btfsc intcon,gie ;see an576
* goto $-2 ;
lod a,#$55 movlw 55h ;unlock write
lod eecon2,a movwf eecon2 ;
lod a,#$aa movlw aah ;
lod eecon2,a movwf eecon2 ;
sef eecon.wr bsf eecon1,wr ;start the write
* bsf intcon,gie ;enable int
sfc eecon.wr
jmp @-2
clf eecon.wren
inc eeadr
lod a,eeadr return nxt free adr
.ret clf bsela
rts
.read sef bsela
lod a,eepnt.read
*inc eepnt.read
lod eeadres,a
sef eecon.rd
lod a,eedata
jmp .ret
ckbatt
sef bsela
lod a,#inits.anselb
lod ansel,a
lod a,#inits.triscb bank1 analog pot as input
lod trisc,a
clf bsela
lod a,#inits.adcon0b an4 input + adc on
lod adcon0,a
sef port.btn0o rise battery test voltage
jmp @+2 give some time to settle
jmp @+2
jmp @+2
jmp @+2
jmp @+2
sef godone start conversion
.wait sfc godone a/d done?
jmp .wait no, wait
lod a,adresh get result
lod pad0,a
sef bsela
lod a,#inits.ansel
lod ansel,a
lod a,#inits.trisc bank1 analog pot as input
lod trisc,a
clf bsela
clf port.btn0o remove test voltage
lod a,#inits.adcon0 an7 input + adc on
lod adcon0,a
rts
getcfg lod a,#$fd get cfg eeprom adr
lod eepnt.read,a
jsr eeprom.read get it
lod config.mode,a save it
lod config.modec,a
inc eepnt.read nxt pos
jsr eeprom.read get it
lod config.charsp,a save it
lod config.charspc,a
inc eepnt.read
jsr eeprom.read get it
lod config.setflg,a save it
lod config.setflgc,a
savcfg lod a,#$fd get cfg eeprom adr
lod eepnt.write,a
lod a,config.mode
eor a,config.modec
lod a,config.mode
sfs z
jsr eeprom.write
lod a,#$fe get cfg eeprom adr
lod eepnt.write,a
lod a,config.charsp
eor a,config.charspc
lod a,config.charsp
sfs z
jsr eeprom.write
lod a,#$ff get cfg eeprom adr
lod eepnt.write,a
lod a,config.setflg
eor a,config.setflgc
lod a,config.setflg
sfs z
jsr eeprom.write
rts
.bc
config * saved config bytes
.mode .bs 1
.charsp .bs 1
.setflg .bs 1
.modec .bs 1
.charspc .bs 1
.setflgc .bs 1
.ec
key2binx lod a,#1
rts
.bs 64-@\64
.en
[/mono]
Re: "Elbug", elektronisk telegrafnyckel.
Marta,
du har fallenhet för sådant, klart värt 572B x 2
Jag letar vidare.
du har fallenhet för sådant, klart värt 572B x 2
Jag letar vidare.
Re: "Elbug", elektronisk telegrafnyckel.
Så har då korten till Keyer3 levererats från China och ett är monterat och klart. Till den här blev mönstret rätt. Istället blev det problem med piezobrickan för medhörning.
Den första på veroboard har en piezo inbyggd i en plastklump som tar upp kortyta och ljudstyrkan är på gränsen till acceptabelt. På den är det 3.5mm kontaktdon och den använder intern pull-up i MCU'n. Den har även en strömbrytare.
Den här har 1/4" kontakter och extern pull-up så inga oskyddade MCU-pinnar ansluts utåt. Det blir 4 motstånd som tar upp plats. Den liggande stiftanslutningen som lådan skall ha hål för är också skrymmande. Ingen brytare, det sparar en hel del yta. MCU ställs i viloläge efter några sekunder och drar då endast någon µA. Den startar sedan omärkligt snabbt.
I min okunskap trodde jag en lös piezobricka skulle ge kraftigare ljud och dessutom kan den monteras ovanför nämnda motstånd. Resultatet blev en knappt hörbar viskning. Så nu är frågan hur det skall lösas? En dynamisk minihögtalare skulle troligen fungera, men är stor och drar betydligt mer ström. En större pieobricka borde flytta mer luft, men måste nog monteras på kortets undersida, ner mot lådans botten. Annan frekvens skall provas, men den får inte bli gäll och skrikig.
Tillägg:
Den här stora piezobrickan måste väl höras betydligt bättre. Är här någon som har provat den?
https://www.electrokit.com/piezoelement-35mm-7bb-35-3
Den första på veroboard har en piezo inbyggd i en plastklump som tar upp kortyta och ljudstyrkan är på gränsen till acceptabelt. På den är det 3.5mm kontaktdon och den använder intern pull-up i MCU'n. Den har även en strömbrytare.
Den här har 1/4" kontakter och extern pull-up så inga oskyddade MCU-pinnar ansluts utåt. Det blir 4 motstånd som tar upp plats. Den liggande stiftanslutningen som lådan skall ha hål för är också skrymmande. Ingen brytare, det sparar en hel del yta. MCU ställs i viloläge efter några sekunder och drar då endast någon µA. Den startar sedan omärkligt snabbt.
I min okunskap trodde jag en lös piezobricka skulle ge kraftigare ljud och dessutom kan den monteras ovanför nämnda motstånd. Resultatet blev en knappt hörbar viskning. Så nu är frågan hur det skall lösas? En dynamisk minihögtalare skulle troligen fungera, men är stor och drar betydligt mer ström. En större pieobricka borde flytta mer luft, men måste nog monteras på kortets undersida, ner mot lådans botten. Annan frekvens skall provas, men den får inte bli gäll och skrikig.
Tillägg:
Den här stora piezobrickan måste väl höras betydligt bättre. Är här någon som har provat den?
https://www.electrokit.com/piezoelement-35mm-7bb-35-3
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: "Elbug", elektronisk telegrafnyckel.
Bra! Roligt att den är i gång nu!
Trevligt att du använder hålmonterat!
Trevligt att du använder hålmonterat!
Re: "Elbug", elektronisk telegrafnyckel.
Där återstår att få till medhörningen. Har beställt några olika alternativ som skall testas. Antagligen skulle det behövas ett nytt kort för att bli riktigt bra. Skall testa en lite större piezobricka och en riktigt stor, samt ett par inkapslade varianter.
Återstår även att cadda en låda och testas hur den blev. Lådan till bygget på vero blev inte bra. Är svårt att ta av och sätta på locket. Min 3D klarar små överhäng mycket bättre än jag trodde, så det skall bli ett helt annat fäste nu.
Hålmontering har definitivt sina fördelar för enhänta invalider. Det blir lätt att få knapparna i en fin rak linje och allt tar mycket mindre tid. För enhänta är det många moment att montera en SMD, där Ni tvåhänta enkelt kan hålla den med en pincett måste jag ställa en hållare på plats. Ett väldigt flaxande med den enda handen...
Återstår även att cadda en låda och testas hur den blev. Lådan till bygget på vero blev inte bra. Är svårt att ta av och sätta på locket. Min 3D klarar små överhäng mycket bättre än jag trodde, så det skall bli ett helt annat fäste nu.
Hålmontering har definitivt sina fördelar för enhänta invalider. Det blir lätt att få knapparna i en fin rak linje och allt tar mycket mindre tid. För enhänta är det många moment att montera en SMD, där Ni tvåhänta enkelt kan hålla den med en pincett måste jag ställa en hållare på plats. Ett väldigt flaxande med den enda handen...