Author Topic: ATMEGA 644P AVR Programming Help Needed  (Read 2160 times)

0 Members and 1 Guest are viewing this topic.

Offline electronix27

  • Contributor
  • Posts: 11
  • Country: us
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #25 on: June 03, 2024, 07:52:42 pm »
Quote
This is incorrect. LFUSE=FF means:
no clock out on the CLKO pin 2 (used to distribute clock or monitor freq. to adjust an internal tweak register),
no internal clock divide by 8,
external xtal oscillator 8MHz or greater, slowest startup delay.

Right on.  Guess I should have looked at my own fuse calculator more closely.
 
The following users thanked this post: pqass

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #26 on: June 03, 2024, 09:21:52 pm »
Before you pull the chip from the PCB, maybe you can just try reading the fuses.
Connect your AVRISP mkII 6 pin ISP header to the shruthi PCB, power up and execute the following:
It should either return info or an error.

Here's what it came back with when the Atmega is plugged into my ZIP socket adapter directly connected to the AVRISP mkII:

kays@Kayss-MacBook-Air ~ % ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude -C ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -p m644p -c avrispmkII -P usb

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Users/kays/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf"
         User configuration file is "/Users/kays/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : usb
         Using Programmer              : avrispmkII
avrdude: usbdev_open(): Found AVRISP mkII, serno: 001D2C990079
         AVR Part                      : ATmega644P
         Chip Erase delay              : 55000 us
         PAGEL                         : PD7
         BS2                           : PA0
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    10   128    0 no       2048    8      0  9000  9000 0xff 0xff
           flash         33     6   256    0 yes     65536  256    256  4500  4500 0xff 0xff
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel AVR ISP mkII
         Programmer Model: AVRISP mkII
         Hardware Version: 1
         Firmware Version Master : 1.24
         Vtarget         : 3.4 V
         SCK period      : 1.00 us

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e960a (probably m644p)
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as FD

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as FD
avrdude: safemode: Fuses OK (E:FD, H:D6, L:FF)

avrdude done.  Thank you.


However if I try to access the AtMega through the circuitboard pins, I get the following error at the end of the report:

avrdude: stk500v2_command(): command failed
avrdude: stk500v2_program_enable(): bad AVRISPmkII connection status: Unknown status 0x00
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.



Should I be trying to erase the entire Atmega and try again from scratch? Should I be adding the -e command somewhere in the Makefile.mk document?
« Last Edit: June 03, 2024, 09:34:30 pm by Midphase »
 

Offline pqass

  • Frequent Contributor
  • **
  • Posts: 831
  • Country: ca
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #27 on: June 03, 2024, 09:35:29 pm »
That's great!   You can communicate with it and the chip isn't dead.

Be sure to add the "-v" (verbose) switch to the end of the avrlib/makefile.mk "AVRDUDE_COM_OPTS" line.

Then you can (from the project root directory):
  make clean
  make bake_all

Report back what it says.


Hang on... 
"ZIP socket adapter directly connected to the AVRISP mkII"?     Do you mean ZIF (zero insertion force)? 
I thought the AVRISP mkII only has a 6 pin ribbon cable.

"if I try to access the AtMega through the circuitboard pins..." 
Was the board powered on?   Was ribbon cable in the correct orientation?
« Last Edit: June 03, 2024, 09:42:13 pm by pqass »
 

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #28 on: June 03, 2024, 10:32:58 pm »
Thank you for bearing with me on this one. I feel like I'm so in-over-my-head with this stuff and your help has been invaluable.

First of all, I picked up this programmer/ZIF socket combo which seemed like a sensible option for this (and EEPROM programming which I would like to do down the line):

https://www.amazon.com/dp/B08WL96RD4?psc=1&ref=ppx_yo2ov_dt_b_product_details

The PCB for the Shruthi synth has a 6-pin header. I tested for continuity on all the pins and I believe that I have everything set up in the correct orientation. I tried the operation both with just the USB of the programmer powering the Shruthi, as well as the Shruthi's own power supply turned on as well and in ether cases it doesn't seem to make much of a difference.

My best results so far appear to be by using the ZIP socket with the ATMega plugged directly into it (once again I tested the continuity between the pins and it seems like I have it inserted correctly.

Now, I am not 100% sure if the information is actually getting written to the ATMega, but here is the result of the latest attempt:

kays@Kayss-MacBook-Air shruthi-1 % make clean
cat build/shruthi1/adc.d build/shruthi1/random.d build/shruthi1/serial.d build/shruthi1/string.d build/shruthi1/time.d build/shruthi1/i2c.d build/shruthi1/wii_nunchuk.d build/shruthi1/audio_out.d build/shruthi1/clock.d build/shruthi1/display.d build/shruthi1/editor.d build/shruthi1/midi_dispatcher.d build/shruthi1/note_stack.d build/shruthi1/oscillator.d build/shruthi1/parameter.d build/shruthi1/part.d build/shruthi1/patch.d build/shruthi1/resources.d build/shruthi1/sequencer_settings.d build/shruthi1/shruthi.d build/shruthi1/storage.d build/shruthi1/system_settings.d build/shruthi1/ui.d build/shruthi1/voice.d build/shruthi1/voice_allocator.d > build/shruthi1/depends.mk
rm -f build/shruthi1/adc.o build/shruthi1/random.o build/shruthi1/serial.o build/shruthi1/string.o build/shruthi1/time.o build/shruthi1/i2c.o build/shruthi1/wii_nunchuk.o build/shruthi1/audio_out.o build/shruthi1/clock.o build/shruthi1/display.o build/shruthi1/editor.o build/shruthi1/midi_dispatcher.o build/shruthi1/note_stack.o build/shruthi1/oscillator.o build/shruthi1/parameter.o build/shruthi1/part.o build/shruthi1/patch.o build/shruthi1/resources.o build/shruthi1/sequencer_settings.o build/shruthi1/shruthi.o build/shruthi1/storage.o build/shruthi1/system_settings.o build/shruthi1/ui.o build/shruthi1/voice.o build/shruthi1/voice_allocator.o build/shruthi1/shruthi1.* build/shruthi1/depends.mk build/shruthi1/adc.d build/shruthi1/random.d build/shruthi1/serial.d build/shruthi1/string.d build/shruthi1/time.d build/shruthi1/i2c.d build/shruthi1/wii_nunchuk.d build/shruthi1/audio_out.d build/shruthi1/clock.d build/shruthi1/display.d build/shruthi1/editor.d build/shruthi1/midi_dispatcher.d build/shruthi1/note_stack.d build/shruthi1/oscillator.d build/shruthi1/parameter.d build/shruthi1/part.d build/shruthi1/patch.d build/shruthi1/resources.d build/shruthi1/sequencer_settings.d build/shruthi1/shruthi.d build/shruthi1/storage.d build/shruthi1/system_settings.d build/shruthi1/ui.d build/shruthi1/voice.d build/shruthi1/voice_allocator.d
kays@Kayss-MacBook-Air shruthi-1 % make bake_all
avrlib/makefile.mk:199: build/shruthi1/depends.mk: No such file or directory
shruthi/makefile:29: build/shruthi1/depends.mk: No such file or directory
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/adc.cc -MF build/shruthi1/adc.d -MT build/shruthi1/adc.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/random.cc -MF build/shruthi1/random.d -MT build/shruthi1/random.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/serial.cc -MF build/shruthi1/serial.d -MT build/shruthi1/serial.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/string.cc -MF build/shruthi1/string.d -MT build/shruthi1/string.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/time.cc -MF build/shruthi1/time.d -MT build/shruthi1/time.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/i2c/i2c.cc -MF build/shruthi1/i2c.d -MT build/shruthi1/i2c.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/devices/wii_nunchuk.cc -MF build/shruthi1/wii_nunchuk.d -MT build/shruthi1/wii_nunchuk.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/audio_out.cc -MF build/shruthi1/audio_out.d -MT build/shruthi1/audio_out.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/clock.cc -MF build/shruthi1/clock.d -MT build/shruthi1/clock.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/display.cc -MF build/shruthi1/display.d -MT build/shruthi1/display.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/editor.cc -MF build/shruthi1/editor.d -MT build/shruthi1/editor.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/midi_dispatcher.cc -MF build/shruthi1/midi_dispatcher.d -MT build/shruthi1/midi_dispatcher.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/note_stack.cc -MF build/shruthi1/note_stack.d -MT build/shruthi1/note_stack.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/oscillator.cc -MF build/shruthi1/oscillator.d -MT build/shruthi1/oscillator.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/parameter.cc -MF build/shruthi1/parameter.d -MT build/shruthi1/parameter.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/part.cc -MF build/shruthi1/part.d -MT build/shruthi1/part.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/patch.cc -MF build/shruthi1/patch.d -MT build/shruthi1/patch.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/resources.cc -MF build/shruthi1/resources.d -MT build/shruthi1/resources.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/sequencer_settings.cc -MF build/shruthi1/sequencer_settings.d -MT build/shruthi1/sequencer_settings.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/shruthi.cc -MF build/shruthi1/shruthi.d -MT build/shruthi1/shruthi.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/storage.cc -MF build/shruthi1/storage.d -MT build/shruthi1/storage.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/system_settings.cc -MF build/shruthi1/system_settings.d -MT build/shruthi1/system_settings.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/ui.cc -MF build/shruthi1/ui.d -MT build/shruthi1/ui.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/voice.cc -MF build/shruthi1/voice.d -MT build/shruthi1/voice.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -MM -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/voice_allocator.cc -MF build/shruthi1/voice_allocator.d -MT build/shruthi1/voice_allocator.o
cat build/shruthi1/adc.d build/shruthi1/random.d build/shruthi1/serial.d build/shruthi1/string.d build/shruthi1/time.d build/shruthi1/i2c.d build/shruthi1/wii_nunchuk.d build/shruthi1/audio_out.d build/shruthi1/clock.d build/shruthi1/display.d build/shruthi1/editor.d build/shruthi1/midi_dispatcher.d build/shruthi1/note_stack.d build/shruthi1/oscillator.d build/shruthi1/parameter.d build/shruthi1/part.d build/shruthi1/patch.d build/shruthi1/resources.d build/shruthi1/sequencer_settings.d build/shruthi1/shruthi.d build/shruthi1/storage.d build/shruthi1/system_settings.d build/shruthi1/ui.d build/shruthi1/voice.d build/shruthi1/voice_allocator.d > build/shruthi1/depends.mk
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/adc.cc -o build/shruthi1/adc.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/random.cc -o build/shruthi1/random.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/serial.cc -o build/shruthi1/serial.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/string.cc -o build/shruthi1/string.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/time.cc -o build/shruthi1/time.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/i2c/i2c.cc -o build/shruthi1/i2c.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions avrlib/devices/wii_nunchuk.cc -o build/shruthi1/wii_nunchuk.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/audio_out.cc -o build/shruthi1/audio_out.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/clock.cc -o build/shruthi1/clock.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/display.cc -o build/shruthi1/display.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/editor.cc -o build/shruthi1/editor.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/midi_dispatcher.cc -o build/shruthi1/midi_dispatcher.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/note_stack.cc -o build/shruthi1/note_stack.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/oscillator.cc -o build/shruthi1/oscillator.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/parameter.cc -o build/shruthi1/parameter.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/part.cc -o build/shruthi1/part.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/patch.cc -o build/shruthi1/patch.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/resources.cc -o build/shruthi1/resources.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/sequencer_settings.cc -o build/shruthi1/sequencer_settings.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/shruthi.cc -o build/shruthi1/shruthi.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/storage.cc -o build/shruthi1/storage.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/system_settings.cc -o build/shruthi1/system_settings.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/ui.cc -o build/shruthi1/ui.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/voice.cc -o build/shruthi1/voice.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR  -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/voice_allocator.cc -o build/shruthi1/voice_allocator.o
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-gcc -mmcu=atmega644p -lm -Os -Wl,--gc-sections -o build/shruthi1/shruthi1.elf build/shruthi1/adc.o build/shruthi1/random.o build/shruthi1/serial.o build/shruthi1/string.o build/shruthi1/time.o build/shruthi1/i2c.o build/shruthi1/wii_nunchuk.o build/shruthi1/audio_out.o build/shruthi1/clock.o build/shruthi1/display.o build/shruthi1/editor.o build/shruthi1/midi_dispatcher.o build/shruthi1/note_stack.o build/shruthi1/oscillator.o build/shruthi1/parameter.o build/shruthi1/part.o build/shruthi1/patch.o build/shruthi1/resources.o build/shruthi1/sequencer_settings.o build/shruthi1/shruthi.o build/shruthi1/storage.o build/shruthi1/system_settings.o build/shruthi1/ui.o build/shruthi1/voice.o build/shruthi1/voice_allocator.o  -lc
~/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy -O ihex -R .eeprom build/shruthi1/shruthi1.elf build/shruthi1/shruthi1.hex
make -f bootloader/makefile fuses
~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude -V -p m644p -C ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -c avrispmkII -P usb -B 10 -e -u \
         -U efuse:w:0xfd:m \
         -U hfuse:w:0xd6:m \
         -U lfuse:w:0xff:m \
         -U lock:w:0x2f:m

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Users/kays/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf"
         User configuration file is "/Users/kays/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : usb
         Using Programmer              : avrispmkII
         Setting bit clk period        : 10.0
avrdude: usbdev_open(): Found AVRISP mkII, serno: 001D2C990079
         AVR Part                      : ATmega644P
         Chip Erase delay              : 55000 us
         PAGEL                         : PD7
         BS2                           : PA0
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    10   128    0 no       2048    8      0  9000  9000 0xff 0xff
           flash         33     6   256    0 yes     65536  256    256  4500  4500 0xff 0xff
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel AVR ISP mkII
         Programmer Model: AVRISP mkII
         Hardware Version: 1
         Firmware Version Master : 1.24
         Vtarget         : 3.3 V
         SCK period      : 10.37 us

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e960a (probably m644p)
avrdude: erasing chip
avrdude: reading input file "0xfd"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of efuse written
avrdude: reading input file "0xd6"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: reading input file "0xff"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of lfuse written
avrdude: reading input file "0x2f"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lock written

avrdude done.  Thank you.

~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude -B 1 -V -p m644p -C ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -c avrispmkII -P usb \
         -U eeprom:w:shruthi/data/factory_data/internal_eeprom.hex:i \
         -U flash:w:build/shruthi1/shruthi1.hex:i -U flash:w:build/muboot/muboot.hex:i \
         -U lock:w:0x2f:m

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Users/kays/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf"
         User configuration file is "/Users/kays/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : usb
         Using Programmer              : avrispmkII
         Setting bit clk period        : 1.0
avrdude: usbdev_open(): Found AVRISP mkII, serno: 001D2C990079
         AVR Part                      : ATmega644P
         Chip Erase delay              : 55000 us
         PAGEL                         : PD7
         BS2                           : PA0
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    10   128    0 no       2048    8      0  9000  9000 0xff 0xff
           flash         33     6   256    0 yes     65536  256    256  4500  4500 0xff 0xff
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel AVR ISP mkII
         Programmer Model: AVRISP mkII
         Hardware Version: 1
         Firmware Version Master : 1.24
         Vtarget         : 3.3 V
         SCK period      : 1.00 us

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e960a (probably m644p)
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as FD
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: reading input file "shruthi/data/factory_data/internal_eeprom.hex"
avrdude: writing eeprom (2048 bytes):

Writing | ################################################## | 100% 0.99s

avrdude: 2048 bytes of eeprom written
avrdude: reading input file "build/shruthi1/shruthi1.hex"
avrdude: writing flash (61986 bytes):

Writing | ################################################## | 100% 4.44s

avrdude: 61986 bytes of flash written
avrdude: reading input file "build/muboot/muboot.hex"
avrdude: writing flash (65516 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 65516 bytes of flash written
avrdude: reading input file "0x2f"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lock written

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as FD
avrdude: safemode: Fuses OK (E:FD, H:D6, L:FF)

avrdude done.  Thank you.
 

Offline pqass

  • Frequent Contributor
  • **
  • Posts: 831
  • Country: ca
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #29 on: June 03, 2024, 10:46:47 pm »
It definitely worked!    Written all the way into the chip.

If you install the chip in the Shruthi PCB and it still doesn't boot (LEDs off or no LCD messages) then you'll have to debug the PCB itself.
ie. checking all power rails are correct and available at all IC pins, if the clock is working, etc.


BTW: neat ZIF PCB. Complete with xtal and LED.
 
The following users thanked this post: Midphase

Offline pqass

  • Frequent Contributor
  • **
  • Posts: 831
  • Country: ca
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #30 on: June 03, 2024, 11:04:23 pm »
Just confirming...

The Shruthi PCB calls for 9VAC input
This is important as it is used to make +5V, +3.3V, +8V, and -8V.
 
The following users thanked this post: Midphase

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #31 on: June 03, 2024, 11:13:07 pm »
Just out of curiosity, how can you tell that the data is written into the 644p? I'm still a bit confused as to what I'm looking at.

I'm going to give it another try and see if I can get the Shruthi to fire up. I built the board very carefully and looking at all the traces and components, everything looks pretty damn good on this end.

I'll start testing around for voltages and other things.
 

Offline pqass

  • Frequent Contributor
  • **
  • Posts: 831
  • Country: ca
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #32 on: June 03, 2024, 11:34:14 pm »
Just out of curiosity, how can you tell that the data is written into the 644p? I'm still a bit confused as to what I'm looking at.

I'm going to give it another try and see if I can get the Shruthi to fire up. I built the board very carefully and looking at all the traces and components, everything looks pretty damn good on this end.

I'll start testing around for voltages and other things.

The fact that everything shows "avrdude: x bytes of y written". 
The chip signature and expected fuse values are returned. 
All commands appear to execute with no sudden stop on an error. 

The AC input is needed to generate both positive and negative rails.
If you've connected a 9VDC source then it's possible for the board to generate -8V but 0V for the other positive rails (depending on the barrel plug polarity; negative center pin).
 
The following users thanked this post: Midphase

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #33 on: June 03, 2024, 11:42:37 pm »
The way the Shruthi works from what I can tell is that the main board hosts all of the CPU/processing and knobs/buttons for the unit, while the so called "filter" board also hosts the power supply. The two boards are hooked together through an 8-pin header.

The documentation says "Connect a DC supply (unregulated, any voltage between 7.5V and 9V, center pin positive) and check the voltages at the following points of the PCB:"

Right now I have a 9V adapter sending out the correct voltages through the voltage regulators and down the pipe to the main board when connected.

However, there is something happening somewhere on the main control board because as I said, I was having a hell of a time trying to get this to work through the 2X3 connection, which leads me to believe that something isn't happy on the board itself (while connecting through the ZIF socket works as expected).

I'm going to investigate further....but I get the feeling that this project might be a tad too ambitious for my taste.
 

Online pcprogrammer

  • Super Contributor
  • ***
  • Posts: 3962
  • Country: nl
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #34 on: June 04, 2024, 05:30:59 am »
It might be that when in the board IC2 the 74LS165N is causing problems. When you use your zif socket to program the MCU there is nothing else connected to the SPI pins so the programmer will be able to control the pins as intended. On the board there are other connections to the SPI pins that might give trouble.

Another issue can be with the supply voltage when also connecting the 5V on the six pin AVRISP connector and trying to power the whole board from it. The voltage might drop due to to much current drawn.

Like qpass wrote with avrdude showing everything written and reading the fuse bytes back correctly the MCU seems to be correctly programmed, and when not working the problem will be on the main board when it does not work as expected.

It could be the crystal that is defective and the MCU is not running due to this. Checking this without an oscilloscope or frequency counter is hardly possible.

Offline electronix27

  • Contributor
  • Posts: 11
  • Country: us
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #35 on: June 04, 2024, 10:22:51 am »
By chance, with 644 back on PCB and powered, have you tried adjusting VR R21 connected to VO pin 3 of LCD.  With too high a positive bias you won’t see anything on screen.
 

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #36 on: June 04, 2024, 04:40:11 pm »
It could be the crystal that is defective and the MCU is not running due to this. Checking this without an oscilloscope or frequency counter is hardly possible.

Interesting. I poked around with an oscilloscope yesterday and I'm not getting particularly great readings off of the 644p. I am expecting a lot of activity off the various pins and I'm not really seeing particularly strong signals.

The crystal clock is also giving me somewhat oddball readings, but it might be that my oscilloscope isn't picking up 20mhz very well (although it should be able to).

I'll continue to poke around the board. Soldering-wise and traces-wise I don't see any red flags so far. The 644 is getting the correct voltage and the ground is properly connected.
 

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #37 on: June 04, 2024, 04:44:31 pm »
By chance, with 644 back on PCB and powered, have you tried adjusting VR R21 connected to VO pin 3 of LCD.  With too high a positive bias you won’t see anything on screen.

Do you mean R1? Let me ask you this, the board calls for a 5K VR there, but all I had was a 10K which is what I ended up using, you don't think that would cause the LCD not to display anything? When I turn the knob it seems to affect the contrast properly, but the range is a bit more limited than I suspect it would have been on a 5K VR.
 

Offline pqass

  • Frequent Contributor
  • **
  • Posts: 831
  • Country: ca
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #38 on: June 04, 2024, 05:15:08 pm »
I'm certain that I've linked to the wrong schematic in my earlier messages.

Starting from your initial post link, I now see there are multiple CPU and addon boards.  On the manual page, it says: "The Shruthi comes either in the classic version with only 4 knobs below the screen; or the XT version which provides hands-on controls on all synthesis parameters."

Can you provide a link to the correct schematic(s), please.  Just so it's clear we know what board you're working on.


 
The following users thanked this post: Midphase

Online pcprogrammer

  • Super Contributor
  • ***
  • Posts: 3962
  • Country: nl
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #39 on: June 04, 2024, 05:22:29 pm »
It could be the crystal that is defective and the MCU is not running due to this. Checking this without an oscilloscope or frequency counter is hardly possible.

Interesting. I poked around with an oscilloscope yesterday and I'm not getting particularly great readings off of the 644p. I am expecting a lot of activity off the various pins and I'm not really seeing particularly strong signals.

The crystal clock is also giving me somewhat oddball readings, but it might be that my oscilloscope isn't picking up 20mhz very well (although it should be able to).

I'll continue to poke around the board. Soldering-wise and traces-wise I don't see any red flags so far. The 644 is getting the correct voltage and the ground is properly connected.

On the crystal (XTAL) pins on the MCU you should see small signals with the 20MHz frequency clearly there. On your programmers zif socket board there are also crystals, so you can compare with that. Frequency might be lower, but it should give you an idea of what the signals look like.


By chance, with 644 back on PCB and powered, have you tried adjusting VR R21 connected to VO pin 3 of LCD.  With too high a positive bias you won’t see anything on screen.

Do you mean R1? Let me ask you this, the board calls for a 5K VR there, but all I had was a 10K which is what I ended up using, you don't think that would cause the LCD not to display anything? When I turn the knob it seems to affect the contrast properly, but the range is a bit more limited than I suspect it would have been on a 5K VR.

It does not matter that much if it is 10K or 5K Ohm. The potentiometer is set as a voltage divider. At one end of the scale the display gets 5V and at the other it gets 0V. Depends on how much current flows into the contrast pin of the display, but don't think that it is that much you would see any difference between the two pots.

Edit: Take some pictures of your board(s) and post them here. They might say more then a 1000 words. :)
« Last Edit: June 04, 2024, 05:24:46 pm by pcprogrammer »
 
The following users thanked this post: Midphase

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #40 on: June 04, 2024, 05:45:17 pm »
Sorry about that. I’m working with the XT version. I’ll post actual photos in just a bit, but in the meantime here’s the actual board I’m working on: 

https://pichenettes.github.io/mutable-instruments-diy-archive/shruthi/digital_xt/

Here is a link to the schematics, although they’re not as informative as I would prefer:

https://pichenettes.github.io/mutable-instruments-diy-archive/static/schematics/Shruthi-Digital-XT-v03.pdf

Many thanks.
 

Offline pqass

  • Frequent Contributor
  • **
  • Posts: 831
  • Country: ca
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #41 on: June 04, 2024, 07:35:37 pm »
I'd pull all the ICs out of their sockets. Power the board and check if +5V makes it to the 644 and other ICs, LCD power pins.

Assuming all other non-socket'd parts are installed, I'd put back only the 644 and 74HC595.  Then connect your AVRISPmkII via ISP header, power the shruthi PCB and try to read the fuse info like you did in your reply#26.

Code: [Select]
% ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude -C ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -p m644p -c avrispmkII -P usb
After power-up, you may get a reaction out of the LCD. Try turning the R1 pot until you see a cursor (dot matrix) or words.

It looks like IO_MISO from IC2 (74HC165 pin 9) would interfere with the ISP header or 644 MISO pin. 
74HC165 pin 9 is always driving IO_MISO (vs go high impedance when not enabled) so two outputs would be fighting each other.
 
The following users thanked this post: Midphase

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #42 on: June 04, 2024, 09:30:35 pm »
I'll run the test you suggested next.

I checked the VCC for the 644p and it appears to be getting a correct voltage of about 4.96V

Here's what is currently happening -- I'm powering on the unit and the screen is just blank. As I test XTAL 1 and 2 on the 644, it appears to elicit a response, and with enough fidgeting on those two pins, I get some activity on the LED display (although the unit does appear to be frozen).

Here is a pic of what it looks like after I probe pins 12 and 13 on the 644 for a bit.

 

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #43 on: June 04, 2024, 10:20:52 pm »
I'd pull all the ICs out of their sockets. Power the board and check if +5V makes it to the 644 and other ICs, LCD power pins.

Assuming all other non-socket'd parts are installed, I'd put back only the 644 and 74HC595.  Then connect your AVRISPmkII via ISP header, power the shruthi PCB and try to read the fuse info like you did in your reply#26.

Ok...so voltages to all the sockets seem to be fine.

When I follow your instructions, and run the command line I get the following:

kays@Kayss-MacBook-Air ~ % ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude -C ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -p m644p -c avrispmkII -P usb

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Users/kays/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf"
         User configuration file is "/Users/kays/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : usb
         Using Programmer              : avrispmkII
avrdude: usbdev_open(): Found AVRISP mkII, serno: 001D2C990079
         AVR Part                      : ATmega644P
         Chip Erase delay              : 55000 us
         PAGEL                         : PD7
         BS2                           : PA0
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    10   128    0 no       2048    8      0  9000  9000 0xff 0xff
           flash         33     6   256    0 yes     65536  256    256  4500  4500 0xff 0xff
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel AVR ISP mkII
         Programmer Model: AVRISP mkII
         Hardware Version: 1
         Firmware Version Master : 1.24
         Vtarget         : 3.5 V
         SCK period      : 1.00 us

avrdude: stk500v2_command(): command failed
avrdude: stk500v2_program_enable(): bad AVRISPmkII connection status: Unknown status 0x00
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.



For whatever reason, the connection appears to be failing when the 644 is installed into the socket...although in this case I'm going directly to the 644 pins themselves so I don't think it's a socket failure issue. Here's my setup (I know...not pretty):





 

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #44 on: June 04, 2024, 10:26:38 pm »
P.S.

When I take the 644 out of the socket and into the ZIP adapter, everything seems to be working correctly:

kays@Kayss-MacBook-Air ~ % ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude -C ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -p m644p -c avrispmkII -P usb

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Users/kays/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf"
         User configuration file is "/Users/kays/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : usb
         Using Programmer              : avrispmkII
avrdude: usbdev_open(): Found AVRISP mkII, serno: 001D2C990079
         AVR Part                      : ATmega644P
         Chip Erase delay              : 55000 us
         PAGEL                         : PD7
         BS2                           : PA0
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    10   128    0 no       2048    8      0  9000  9000 0xff 0xff
           flash         33     6   256    0 yes     65536  256    256  4500  4500 0xff 0xff
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel AVR ISP mkII
         Programmer Model: AVRISP mkII
         Hardware Version: 1
         Firmware Version Master : 1.24
         Vtarget         : 3.4 V
         SCK period      : 1.00 us

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e960a (probably m644p)
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as FD

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as FD
avrdude: safemode: Fuses OK (E:FD, H:D6, L:FF)

avrdude done.  Thank you.
 

Offline pqass

  • Frequent Contributor
  • **
  • Posts: 831
  • Country: ca
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #45 on: June 04, 2024, 11:04:49 pm »
I'll run the test you suggested next.

I checked the VCC for the 644p and it appears to be getting a correct voltage of about 4.96V

Here's what is currently happening -- I'm powering on the unit and the screen is just blank. As I test XTAL 1 and 2 on the 644, it appears to elicit a response, and with enough fidgeting on those two pins, I get some activity on the LED display (although the unit does appear to be frozen).

Here is a pic of what it looks like after I probe pins 12 and 13 on the 644 for a bit.


Nice board.  So the programming was successful as you're getting something intelligent on the LCD, eventually.

Look into re-soldering the xtal connections (or its 20pF caps).
Sounds like a bad xtal given it runs for a while then freezes.
Sometimes I've had to tap them to get them started. 


Quote
For whatever reason, the connection appears to be failing when the 644 is installed into the socket...although in this case I'm going directly to the 644 pins themselves so I don't think it's a socket failure issue. Here's my setup (I know...not pretty):

But IC2 (HC165) must be pulled off the board to use the AVRISPmkII because it'll interfere with the MISO ISP connector line.


Also,
I'm not sure it's a requirement to have a reliable clock while using the AVRISPmkII.  It probably is.
« Last Edit: June 04, 2024, 11:16:38 pm by pqass »
 
The following users thanked this post: pcprogrammer, Midphase

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #46 on: June 05, 2024, 12:06:00 am »
Ok, I seem to be making some good progress. I reseated all the IC's, and reflowed any solder point that looked a bit suspicious. I also replaced the 20mhz crystal with a spare I had...just in case.

So now the board powers up and the display shows what I think it's supposed to be showing which is a big step forward. However several of the parameters are flickering like crazy, as if the board is trying to rapidly switch values on a specific parameter. It might be a button shorting out, or something else perhaps? I do have a spare 644p as well that I can try to program to see if for some reason there might be a problem with the Atmega itself.

I should also mention that I didn't realize until after ordering the parts that the encoder that it wants needs to be one with a switch (I got me an encoder without a push down switch function), so I don't know if that might be the cause of the weird behavior since nothing is actually soldered in place of where the switch pins on the encoder would normally be soldered to.

I made a short video of the flickering characters that I'm seeing, it doesn't happen in all of the menus, but something is definitely not quite right:  https://youtu.be/hsg6ySoRIZo
« Last Edit: June 05, 2024, 12:35:36 am by Midphase »
 

Offline pqass

  • Frequent Contributor
  • **
  • Posts: 831
  • Country: ca
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #47 on: June 05, 2024, 12:39:42 am »
I think the flickering means it's being constantly updated.  It may be that some LCDs don't erase before write whereas others do. That is, it may not be noticeable on other makes of LCDs.

The encoder push switch is likely a select/enter key. Until you get the correct part, you can temporarily put a momentary (NO) push button at the end of wires bringing it out from behind the board.  The ENC_SW pin on the 644 probably enables an internal pullup so it's not flapping in the breeze.

I'd cleanup the board with IPA too.
 
The following users thanked this post: Midphase

Online pcprogrammer

  • Super Contributor
  • ***
  • Posts: 3962
  • Country: nl
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #48 on: June 05, 2024, 05:56:28 am »
Quote
For whatever reason, the connection appears to be failing when the 644 is installed into the socket...although in this case I'm going directly to the 644 pins themselves so I don't think it's a socket failure issue. Here's my setup (I know...not pretty):

But IC2 (HC165) must be pulled off the board to use the AVRISPmkII because it'll interfere with the MISO ISP connector line.

Had not checked the datasheet of the HC165 before, but it definitely will cause problems. Pin 9 is a push pull output and will keep MISO in a defined state. The programmer will have a hard time pushing on it's own value and fail in programming the 644P.

Kind of a bad design.

Also,
I'm not sure it's a requirement to have a reliable clock while using the AVRISPmkII.  It probably is.

Yes it is, but it can be the internal clock when the fuses are set as such.



@Midphase
Well done.

I suspect the crystal had either poor connections or was defective. One hint for future projects, with a crystal like this and top side traces running underneath it is based to use a shim underneath the crystal. Can be a thin piece of plastic or a specially made one for the purpose, like these: https://www.amazon.ca/100PCS-Crystal-Oscillator-Gasket-Insulating/dp/B07Y7SZFBB

This prevents it from making shorts when the solder mask gets damaged.

Offline MidphaseTopic starter

  • Contributor
  • Posts: 31
  • Country: us
    • KaysLABS
Re: ATMEGA 644P AVR Programming Help Needed
« Reply #49 on: June 05, 2024, 06:32:46 am »
I suspect the crystal had either poor connections or was defective. One hint for future projects, with a crystal like this and top side traces running underneath it is based to use a shim underneath the crystal.

Good idea, thank you. I actually saw a piece of rubber gasket underneath an oscillator once and was wondering what it was used for. I can see that  the crystal oscillator body, being made of metal, could potentially cause conductivity. Incidentally, when I re-installed the other crystal oscillator I kept the body further away from the PCB which I think reduced the possibility of it making contact with the top side traces.

I'm still not convinced that the LED display flickering is only due to a poor implementation of the write/erase cycle. For one, the functionality of the synth device appears to be affected by it -- but I still need to investigate further before coming to a full determination. One of the things that I want to do is to check all of the switches that I installed on the board as it's possible that one of them could be shorting out, causing both the weird flickering as well as the inconsistent functionality.

Whew....and I thought repairing old synths was difficult! ;-)
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf