Wednesday, May 27, 2015

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$ 

.


 .