Nugroho's blog.

Thursday, May 28, 2015

Flip the Bit


Maybe it's just me, but I recently realized that we have a handy feature on ATTiny13A for flip the value of the bit.


so instead of

sbic PINB,0
cbi PINB,0
sbi PINB,0

we could just use

sbi PINB,0


Saving some clocks, :)



Wednesday, May 27, 2015

Blinking LED using Interrupt on ATTiny13A

Here's the template


.include "../tn13Adef.INC" 
.def a=r16
.org $0000              ; startup vector
    rjmp onReset
.org $0006              ; compare match vector
    rjmp Tim0CompA
onReset:
    sbi DDRB,0          ; port B0 as output
    
    ldi a, 0b10000011   ; pwm mode 3
    out TCCR0A, a
    
    ldi a, 0b00000101   ; divider /1024
    out TCCR0B,a
    
    ldi a, 0b0000100    ; enable compare interrupt
    out TIMSK0,a
    
    sei
main:
    rjmp main
        
Tim0CompA:
    in a, OCR0A
    inc a
    out OCR0A,a

    reti



.



if we set divider to 8

    ldi a, 0b000000010   ; divider /8
    out TCCR0B,a

and edit the timer routine to

Tim0CompA:
    in a, OCR0A
    dec a
    out OCR0A,a

    reti


we'll get smoother PWM respond 



with prescaler 64



prescaler 256



with prescaler 64 and increasing OCR0A

Oscillating LED Blink Delay on ATTiny13A

Based on my ADC with PWM output program.

The expected result is the old school MacbookPro unibody sleep indicator LED;  Sir Jonathan Ive style, :)

The code below resulted on slow to fast to slow to fast... blinking LED




;based on ADC 
.include "../tn13Adef.INC"
.def zero=r19
.def max=r20
.org $0000
init:
ldi r17,0
ldi r18,1 ;increment/decrement check
ldi zero,0
ldi max,255
sbi DDRB,0
;ldi R16,0b10000011
;out TCCR0A,R16 ;fast pwm
main:
cpse r18,zero
rjmp increment
rjmp decrement
back:
cp r17,zero
breq switchUp

cp r17,max
breq switchDown

switch:
rcall delay
sbi PINB,0
rjmp main

increment:
inc r17
rjmp back

decrement:
dec r17
rjmp back

switchUp:
ldi r18,1
rjmp switch

switchDown:
ldi r18,0
rjmp switch

delay:
mov r16,r17
loopDelay:
rcall pause
dec r16
brne loopDelay
ret

pause:
ldi r21,127
lpause:
dec r21
brne lpause
ret




Save it as timer2.s, build it using avra

Nugrohos-MacBook-Air:timer nugroho$ avra -o timer2.hex timer2.s 
AVRA: advanced AVR macro assembler Version 1.3.0 Build 1 (8 May 2010)
Copyright (C) 1998-2010. Check out README file for more info

AVRA is an open source assembler for Atmel AVR microcontroller family
It can be used as a replacement of 'AVRASM32.EXE' the original assembler
shipped with AVR Studio. We do not guarantee full compatibility for avra.

AVRA comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of avra under the terms
of the GNU General Public License.
For more information about these matters, see the files named COPYING.

Pass 1...
Pass 2...
done

Used memory blocks:
Code : Start = 0x0000, End = 0x0019, Length = 0x001A

Assembly complete with no errors.
Segment usage:
Code : 26 words (52 bytes)
Data : 0 bytes
EEPROM : 0 bytes
Nugrohos-MacBook-Air:timer nugroho$ avra -o timer2.hex timer2.s
AVRA: advanced AVR macro assembler Version 1.3.0 Build 1 (8 May 2010)
Copyright (C) 1998-2010. Check out README file for more info

AVRA is an open source assembler for Atmel AVR microcontroller family
It can be used as a replacement of 'AVRASM32.EXE' the original assembler
shipped with AVR Studio. We do not guarantee full compatibility for avra.

AVRA comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of avra under the terms
of the GNU General Public License.
For more information about these matters, see the files named COPYING.

Pass 1...
Pass 2...
done

Used memory blocks:
Code : Start = 0x0000, End = 0x0019, Length = 0x001A

Assembly complete with no errors.
Segment usage:
Code : 26 words (52 bytes)
Data : 0 bytes
EEPROM : 0 bytes
Nugrohos-MacBook-Air:timer nugroho$ vavrdisasm timer2.s.hex
0: e0 10 ldi R17, 0x00
2: e0 21 ldi R18, 0x01
4: e0 30 ldi R19, 0x00
6: ef 4f ser R20
8: 13 23 cpse R18, R19
a: c0 08 rjmp .+16 ; 0x1c
c: c0 09 rjmp .+18 ; 0x20
e: 17 13 cp R17, R19
10: f0 49 breq .+18 ; 0x24
12: 17 14 cp R17, R20
14: f0 49 breq .+18 ; 0x28
16: d0 0a rcall .+20 ; 0x2c
18: 9a b0 sbi $16, 0
1a: cf f6 rjmp .-20 ; 0x8
1c: 95 13 inc R17
1e: cf f7 rjmp .-18 ; 0xe
20: 95 1a dec R17
22: cf f5 rjmp .-22 ; 0xe
24: e0 21 ldi R18, 0x01
26: cf f7 rjmp .-18 ; 0x16
28: e0 20 ldi R18, 0x00
2a: cf f5 rjmp .-22 ; 0x16
2c: 2f 01 mov R16, R17
2e: 95 0a dec R16
30: f7 f1 brne .-4 ; 0x2e
32: 95 08 ret
Nugrohos-MacBook-Air:timer nugroho$


upload using avrdude

Nugrohos-MacBook-Air:timer nugroho$ avrdude -p t13 -P usb -c usbasp -B4 -n

avrdude: set SCK frequency to 187500 Hz
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9007

avrdude: safemode: Fuses OK (H:FF, E:FF, L:6A)

avrdude done. Thank you.

Nugrohos-MacBook-Air:timer nugroho$ avrdude -p t13 -P usb -c usbasp -B4 -U flash:w:timer2.s.hex

avrdude: set SCK frequency to 187500 Hz
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9007
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: set SCK frequency to 187500 Hz
avrdude: reading input file "timer2.s.hex"
avrdude: input file timer2.s.hex auto detected as Intel Hex
avrdude: writing flash (52 bytes):

Writing | ################################################## | 100% 0.04s

avrdude: 52 bytes of flash written
avrdude: verifying flash memory against timer2.s.hex:
avrdude: load data flash data from input file timer2.s.hex:
avrdude: input file timer2.s.hex auto detected as Intel Hex
avrdude: input file timer2.s.hex contains 52 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 52 bytes of flash verified

avrdude: safemode: Fuses OK (H:FF, E:FF, L:6A)

avrdude done. Thank you.

Nugrohos-MacBook-Air:timer nugroho$

.


 .

Tuesday, May 26, 2015

Gendhing dan Perkusi


P Rosyid menulis tentang langgam beberapa waktu lalu.   
Dan saya juga ingin menulis. Memang lain, ini tentang gendhing jawa. Betapa dulu ketika masih aktif nge-band sering kesulitan menirukan lagu-lagu jawa tertentu. Bukan lagu-lagu semacam Gambang Semarang atau langgam atau Bossanova Jawa; itu relatif mudah. 

Lagu-lagu yang memiliki gaya klasik. Lingsir Wengi, Kusumaning Ati,...

Dalam beberapa hal, musik jawa memang lain dibanding dengan musik “standar” saat ini.

Di musik selain jawa. Alat-alat musik ritmis/perkusi digunakan untuk menjaga irama, menghitung ketukan, menandai birama. Entah itu drum, bongo, ketipung, tambourine atau gendang. Mereka memiliki beat tertentu.


Seperti gendang di lagu-lagu melayu, bongo/conga di lagu-lagu latin semacam sway atau volare. Juga drum di lagu-lagu…eh, banyak lagu, :)

Di musik jawa, di gendhing-gendhing yang mengiringi tembang semacan Dhandhanggula, Durma, Maskumambang, Pucung, atau beberapa gendhing yang agak modern (semacam Ela-Elo ciptaan Menik Sunyahni), alat musik yang seharusnya untuk ritmis malah seakan tidak punya ritme.

Gendhang di musik jawa tidak digunakan untuk menandai ketukan. Dia disebut sebagai pamurba (di buku kembang setaman) entah apa itu maksudnya :), satu hal yang pasti, kita tidak mengikuti irama gendhang saat mendengarkan tembang. Tabuhan gendhang juga berbeda untuk tiap musisi, walau musiknya sama. 

Dan penabuh gendhang biasanya adalah primadona. Lain dengan pemain saron atau bonang atau gong. Di musik jawa, merekalah yang menjaga ritme. Mereka memiliki irama konstan dari awal hingga akhir lagu.

Jika gitaris atau pianis merupakan primadona di suatu band, penabuh gendhang merupakan bintang di sebuah grup karawitan, :)

(foto dari https://tukanggamelan.files.wordpress.com/2013/10/gamelanrex11.jpg)



Timer on ATTiny13A using Interrupt


 It started with this

.include "../tn13Adef.inc" 
.org 0000 
rjmp reset 
.org 0003 
rjmp timer

reset:
sbi ddrb,0           
ldi r16,0b00000101    
out tccr0b,r16
ldi r16,0b00000010    
out timsk0,r16
sei

loop:
ldi r16,(1<<SE)
out mcucr,r16
sleep
rjmp loop

timer:
sbi   pinb,0       

reti




Nugrohos-MacBook-Air:timer nugroho$ avra -o timer.hex timer.s 
AVRA: advanced AVR macro assembler Version 1.3.0 Build 1 (8 May 2010)
Copyright (C) 1998-2010. Check out README file for more info

AVRA is an open source assembler for Atmel AVR microcontroller family
It can be used as a replacement of 'AVRASM32.EXE' the original assembler
shipped with AVR Studio. We do not guarantee full compatibility for avra.

AVRA comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of avra under the terms
of the GNU General Public License.
For more information about these matters, see the files named COPYING.

Pass 1...
Pass 2...
done

Used memory blocks:
Code : Start = 0x0000, End = 0x0000, Length = 0x0001
Code : Start = 0x0003, End = 0x000F, Length = 0x000D

Assembly complete with no errors.
Segment usage:
Code : 14 words (28 bytes)
Data : 0 bytes
EEPROM : 0 bytes
Nugrohos-MacBook-Air:timer nugroho$ vavrdisasm timer.s.hex
0: c0 03 rjmp .+6 ; 0x8
6: c0 0a rjmp .+20 ; 0x1c
8: 9a b8 sbi $17, 0
a: e0 05 ldi R16, 0x05
c: bf 03 out $33, R16
e: e0 02 ldi R16, 0x02
10: bf 09 out $39, R16
12: 94 78 sei
14: e2 00 ldi R16, 0x20
16: bf 05 out $35, R16
18: 95 88 sleep
1a: cf fc rjmp .-8 ; 0x14
1c: 9a b0 sbi $16, 0
1e: 95 18 reti
Nugrohos-MacBook-Air:timer nugroho$

.

Monday, May 25, 2015

ATTiny13A Arduino

ATTiny is ... well, tiny. Not very suitable to programed it on arduino. Nevertheless, I decided to do it.



Create ‘hardware’ folder in Arduino sketch folder, unzip the file.
Download the Smeezekitty core, http://sourceforge.net/projects/ard-core13/files/latest/download

Unzip it, copy the files, paste in …/hardware/attiny/avr/variants/core13/ (if folder didn’t exist, create it)
edit the boards.txt files at
…/hardware/attiny/avr/boards.txt
boards.txt
menu.cpu=Processor
menu.clock=Clock
attiny.name=ATtiny
attiny.bootloader.tool=arduino:avrdude
attiny.bootloader.unlock_bits=0xff
attiny.bootloader.lock_bits=0xff
attiny.build.core=arduino:arduino
attiny.build.board=attiny
attiny.upload.tool=arduino:avrdude
#attiny.upload.tool=usbasp

#################################################
attiny.menu.cpu.attiny13=ATtiny13
attiny.menu.cpu.attiny13.upload.maximum_size=1024
attiny.menu.cpu.attiny13.build.mcu=attiny13
attiny.menu.cpu.attiny13.build.variant=core13

attiny.menu.clock.internal96=9.6MHz (internal)
attiny.menu.clock.internal96.bootloader.low_fuses=0x7A
attiny.menu.clock.internal96.bootloader.high_fuses=0xff
attiny.menu.clock.internal96.build.f_cpu=9600000L

################################################

attiny.menu.clock.internal48=4.8MHz (internal)
attiny.menu.clock.internal48.bootloader.low_fuses=0x79
attiny.menu.clock.internal48.bootloader.high_fuses=0xff
attiny.menu.clock.internal48.build.f_cpu=4800000L
################################################


avrdude give the error because my downloader need -B4 option (I installed new bootloader, flash it, remove auto sck, so the avrdude warning gone)

In order to be able to upload it to ATTiny13A, we have to edit the file.

Macintosh HD/Applications/Arduino/Contents/Java/Hardware/arduino/avr/programmers.txt

edit it


usbasp.name=USBasp
usbasp.communication=usb
usbasp.protocol=usbasp
usbasp.program.protocol=usbasp
usbasp.program.tool=avrdude
usbasp.program.extra_params=-Pusb -B4


start arduino IDE

it give firewall warning

so 

undo the edit or reinstall the arduino

create programmers.txt in the same folder with  boards.txt


usbasp.name=USBaspN
usbasp.communication=usb
usbasp.protocol=usbasp
usbasp.program.protocol=usbasp
usbasp.program.tool=avrdude
usbasp.program.extra_params=-Pusb -B4


we use USBaspN 


Blink without delay,  


const int ledPin =  1;      // the number of the LED pin
int ledState = LOW; // ledState used to set the LED
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 1000; // interval at which to blink (milliseconds)
void setup() {
pinMode(ledPin, OUTPUT);
}

void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}


For some reason, the delay on LED seem longer than 1 s (but it worked).  Maybe it’s the same reason the blink example (with delay.) didn’t work



. .













Android Studio on My OS X Yosemite


Well, a picture is worth thousand words.

So, here the millions words for you, :)
































Previously I went to Android website to install Eclipse with ADT. I installed this Android Studio instead; on my Macbook Air wit OS X Yosemite. 

Oh yeah, you maybe encountered the error about JDK 7. I have to manually point to my JDK 7 installation.

323f (5) amp (1) android (12) apple (7) arduino (18) art (1) assembler (21) astina (4) ATTiny (23) blackberry (4) camera (3) canon (2) cerita (2) computer (106) crazyness (11) debian (1) delphi (39) diary (286) flash (8) fortran (6) freebsd (6) google apps script (8) guitar (2) HTML5 (10) IFTTT (7) Instagram (7) internet (12) iOS (5) iPad (6) iPhone (5) java (1) javascript (1) keynote (2) LaTeX (6) lazarus (1) linux (29) lion (15) mac (28) macbook air (8) macbook pro (3) macOS (1) Math (3) mathematica (1) maverick (6) mazda (4) microcontroler (35) mountain lion (2) music (37) netbook (1) nugnux (6) os x (36) php (1) Physicist (29) Picture (3) programming (189) Python (109) S2 (13) software (7) Soliloquy (125) Ubuntu (5) unix (4) Video (8) wayang (3) yosemite (3)