diff --git a/pocketpsithemius.ino b/pocketpsithemius.ino new file mode 100644 index 0000000..ab3432d --- /dev/null +++ b/pocketpsithemius.ino @@ -0,0 +1,298 @@ +/*MIT License + +Copyright (c) 2020 Sublunar Psionics + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Special Thanks to Slavko Andrejevic for providing the main framework of this +firmware and for technical support. + +*/ + +#define btnA 9 //PB0 / Button A: +#define btnB 8 //PB1 / Button B: +#define btnC 13 //PA7 / Button C: +#define led_R 12 //PA6 / RED LED +#define led_G 14 //PA3 / GREEN LED +#define led_B 1 //PA1 / BLUE LED +#define uv_LED 6 //PB3 / UV LED +#define OPAMP 3 //PB6 / turns on the Op Amp circuit +#define ON HIGH +#define OFF LOW + +//---- BUTTONS ---- +byte counterA = 0; //count push btnA: +byte counterB = 0; //count push btnB: +byte counterC = 0; //count push btnC: +bool enabled_btnAC = true; //Button A + C enabled or not +bool enabled_btnB = true; //Button B enabled or not +static bool last_btnA = false; //Previous state of button A +static bool last_btnB = false; //Previous state of button B +static bool last_btnC = false; //Previous state of button C + +//---- LEDS ---- +bool enabled_LED = false; //turn on a tricolor LED +bool was_on_LED = false; //was LED on? +bool usePWM = false; //use softPWM for more nuanced colors +void offLeds() { + analogWrite(led_R, 255); + analogWrite(led_B, 255); + analogWrite(led_G, 255); +} + +//---- TIMER ---- +bool countDelay = false; //are we counting ticks to time out the UV LEDs? +static uint32_t delayCount = 0; +long lastDebounceTime = 0; // the last time the output pin was toggled +long debounceDelay = 50; // the debounce time; increase if the output flickers + +//---- COLOR ---- +struct COLOR { //Creating structure for colors + byte r; + byte g; + byte b; +}; +COLOR selectedColor = { 0 , 0 , 0 }; + +void setColor(COLOR paint, bool full = true) { + //tricolor LED color + selectedColor = paint; + selectedColor.r = paint.r; + selectedColor.b = paint.b; + selectedColor.g = paint.g; + //paint contains r g b value for pwm on pins + showColor(); +} + +void showColor() { + if (enabled_LED == true) { + softPWM(led_R, selectedColor.r, 1); + softPWM(led_B, selectedColor.b, 1); + softPWM(led_G, selectedColor.g, 1); + } else { + offLeds(); + } +} + +//---- PLANETARY COLORS ---- +COLOR white = { 255 , 255 , 255 }; //Moon correspondence +COLOR orange = { 255 , 128 , 0 }; //Mercury correspondence +COLOR green = { 0 , 255 , 0 }; //Venus correspondence +COLOR yellow = { 255 , 255 , 0 }; //Sol correspondence +COLOR red = { 255 , 0 , 0 }; //Mars correspondence +COLOR blue = { 0 , 128 , 255 }; //Jupiter correspondence +COLOR purple = { 128 , 0 , 128 }; //Jupiter/Moon correspondence +COLOR indigo = { 111 , 0 , 255 }; //Saturn correspondence +COLOR grey = { 40 , 40 , 40 }; //Saturn correspondence + +//---- DEVICE SETUP ---- +void setup() { + + //Buttons + pinMode(btnA, INPUT); + pinMode(btnB, INPUT); + pinMode(btnC, INPUT); + + //LEDS + pinMode(led_B, OUTPUT); + pinMode(led_G, OUTPUT); + pinMode(led_R, OUTPUT); + offLeds(); + + //UV LED + pinMode(uv_LED, OUTPUT); + digitalWrite(uv_LED, OFF); + + // OP AMP + pinMode(OPAMP, OUTPUT); + digitalWrite(OPAMP, OFF); +} + +//---- DEVICE LOOP ---- +void loop() { + + // Detect and debounce button presses + if ( (millis() - lastDebounceTime) > debounceDelay) { + + //Button A: + bool pressed_btnA = !digitalRead(btnA); + if (pressed_btnA != last_btnA ) { + if (pressed_btnA == true) { + counterA++; + if (counterA > 10)counterA = 1; + pressButton_A(); + } + last_btnA = pressed_btnA; + } + + //Button B: + bool pressed_btnB = !digitalRead(btnB); + if (pressed_btnB != last_btnB ) { + if (pressed_btnB == true) { + counterB++; + if (counterB > 2)counterB = 1; + pressButton_B(); + } + last_btnB = pressed_btnB; + } + + //Button C: + bool pressed_btnC = !digitalRead(btnC); + if (pressed_btnC != last_btnC ) { + if (pressed_btnC == true) { + counterC++; + if (counterC > 2)counterC = 1; + pressButton_C(); + } + last_btnC = pressed_btnC; + } + lastDebounceTime = millis(); //set the current time + } + + showColor(); + + //Counts up and turns UV LED off after 1min + if (countDelay == true) { + delayCount++; + counterB = 1; + } + else delayCount = 0; + if (delayCount > 1200000) { + //Turn the UV LED off + digitalWrite(uv_LED, LOW); + countDelay = false; + //Reenable all buttons + enabled_btnAC = true; + //LED Status back to before Button B was pushed + enabled_LED = was_on_LED; + } +} + +//---- BUTTON STATE MACHINE FUNCTIONS +//Button A: +void pressButton_A() { + if (enabled_btnAC == false) { + counterA = 0; + return;//Chek if button is disabled + } + switch (counterA) { + case 1: + enabled_LED = true; + setColor(white, true); + break; + case 2: + usePWM = true; + setColor(orange, true); + break; + case 3: + usePWM = false; + setColor(green, true); + break; + case 4: + setColor(yellow, true); + break; + case 5: + setColor(red, true); + break; + case 6: + setColor(blue, true); + break; + case 7: + usePWM = true; + setColor(purple, true); + break; + case 8: + setColor(indigo, true); + break; + case 9: + setColor(grey, true); + break; + case 10: + enabled_LED = false; + counterA = 0;//TURN OFF + break; + } +} + +//Button B: +void pressButton_B() { + if (enabled_btnB == false) { + counterB = 0; + return; + } + if (counterB == 1) { //1st press: + //was color LED on when button was pushed? + was_on_LED = enabled_LED; + //Disable LED and buttons A and C + enabled_LED = false; + counterA = 0; + counterC = 0; + enabled_btnAC = false; + enabled_btnB == false; + //Turn off Op-Amp circuit + digitalWrite(OPAMP, OFF); + enabled_btnB == true; + digitalWrite(uv_LED, ON); + countDelay = true; // turn on delay counter in loop() + } + if (counterB == 2) { //2nd press: + if (digitalRead(uv_LED) == ON) { + //Turn UV LED off + digitalWrite(uv_LED, OFF); + } + //Re-enable all buttons + enabled_btnAC = true; + enabled_btnB = true; + //LED Status back to before Button B was pushed + enabled_LED = was_on_LED; + //reset delay counter + countDelay = false; + } +} + +//Button C: +void pressButton_C() { + if (enabled_btnAC == false) { + counterC = 0; + return; + } + if (counterC == 1) { //1st press: + digitalWrite(OPAMP, ON); + } + if (counterC == 2) { //2nd press: + digitalWrite(OPAMP, OFF); + } +} + +//---- SOFTWARE PWM ---- +// software PWM function that fakes analog output +void softPWM(byte pin, byte freq, byte sp) { + byte delay1 = 255 - freq; + if (usePWM == true) { + while (sp > 0) { + digitalWrite(pin, LOW); //on + delayMicroseconds(freq); + digitalWrite(pin, HIGH); //off + delayMicroseconds(delay1); + sp--; + } + } else { + analogWrite(pin, 255 - freq); + } +} diff --git a/pocketpsithemius.ino.hex b/pocketpsithemius.ino.hex new file mode 100644 index 0000000..0d9eb9c --- /dev/null +++ b/pocketpsithemius.ino.hex @@ -0,0 +1,130 @@ +:1000000033C04BC04AC049C048C047C03FC245C0CA +:1000100044C043C042C041C040C03FC03EC03DC0DC +:100020003CC03BC03AC000000000050004000300D3 +:10003000000000000000010204402010080402013A +:100040001020408008800101010202020202020227 +:1000500001010101010200003900360000003B00EF +:10006000380000003A00370011241FBECFEDCDBF8D +:1000700010E0A0E6B0E0EEEDF7E002C005900D92D2 +:10008000A238B107D9F720E0A2E8B0E001C01D9284 +:10009000A03AB207E1F79BD3A0C3B2CF6FEF70E0F5 +:1000A0008CE064D26FEF70E081E060D26FEF70E0BF +:1000B0008EE05CC260E089E0AFD260E088E0ACD264 +:1000C00060E08DE0A9D261E081E0A6D261E08EE03F +:1000D000A3D261E08CE0A0D2E1DF61E086E09CD2B7 +:1000E00060E086E0EDD261E083E096D260E083E0FC +:1000F000E7C2CF9380917F00811104C010929500D8 +:10010000CF910895C0919500C130A1F480919000E5 +:1001100080938F001092900010929600109294009D +:100120001092800060E083E0CBD261E086E0C8D22C +:10013000C0938D0080919500823011F786E007D33F +:10014000019719F460E086E0BBD281E080938000E3 +:1001500080937F0080918F008093900010928D009B +:10016000CFCF80918000811103C010929400089538 +:1001700080919400813019F461E083E0A1D28091F4 +:100180009400823019F460E083E09AC20895EF92FF +:10019000FF920F931F93CF93DF93182F042F80911B +:1001A0008E00882399F0E62EF12C6095C62FD0E0C2 +:1001B0000023D1F060E0812F83D2C701BDD161E07F +:1001C000812F7ED2CE01B8D10150F2CF8FEF90E0D7 +:1001D0009C01261B3109B901812FDF91CF911F911D +:1001E0000F91FF90EF90C2C1DF91CF911F910F91BE +:1001F000FF90EF90089580919000882379F041E07E +:10020000609182008CE0C3DF41E06091840081E076 +:10021000BEDF41E0609183008EE0B9CF3FCF6093B5 +:1002200082007093830080938400E5CF80918000EA +:10023000811103C0109296000895E0919600E1505C +:10024000EA30D0F7F0E0EA5DFE4F099409C012C031 +:100250001BC023C029C02FC035C03EC044C04AC007 +:1002600081E0809390006091780070917900809196 +:100270007A00D5CF81E080938E00609175007091F7 +:10028000760080917700F5CF10928E006091720019 +:100290007091730080917400ECCF60916F00709149 +:1002A000700080917100E5CF60916C0070916D00DD +:1002B00080916E00DECF6091690070916A0080913C +:1002C0006B00D7CF81E080938E00609166007091C3 +:1002D000670080916800CDCF6091630070916400E9 +:1002E00080916500C6CF609160007091610080913F +:1002F0006200BFCF109290009DCF0F931F93CF93BA +:100300000FD10091850010918600209187003091D7 +:100310008800601B710B820B930B00917B00109186 +:100320007C0020917D0030917E000617170728077A +:10033000390708F04EC089E00AD2C1E0009709F001 +:10034000C0E0209193002C1769F0892B49F480912B +:1003500096008F5F8B3008F074C08093960066DF44 +:10036000C093930088E0F3D1C1E0009709F0C0E0AA +:10037000209192002C1769F0892B49F48091950007 +:100380008F5F833008F05FC080939500B2DEC0932A +:1003900092008DE0DCD1C1E0009709F0C0E020912F +:1003A00091002C1769F0892B49F4809194008F5F9C +:1003B000833008F04AC080939400D3DEC09391004C +:1003C000AFD06093850070938600809387009093F0 +:1003D000880011DF80918D008823C9F18091890008 +:1003E00090918A00A0918B00B0918C000196A11D84 +:1003F000B11D8093890090938A00A0938B00B093E5 +:100400008C0081E0809395008091890090918A0012 +:10041000A0918B00B0918C0081389F44A241B1051E +:1004200060F060E086E04CD110928D0081E0809316 +:10043000800080918F0080939000CF911F910F9149 +:10044000089581E08ACF81E09FCF81E0B4CF109200 +:10045000890010928A0010928B0010928C00D4CFE9 +:100460008FB5807F8FBD80B7826080BF80B781608D +:1004700080BF87B5816087BD86B58D7F86BD86B517 +:10048000816086BD8FB587608FBD08951F920F92E2 +:100490000FB60F9211242F933F938F939F93AF9397 +:1004A000BF938091980090919900A0919A00B0918B +:1004B0009B003091970023E0230F2D3768F126E849 +:1004C000230F0296A11DB11D2093970080939800E1 +:1004D00090939900A0939A00B0939B0080919C0008 +:1004E00090919D00A0919E00B0919F000196A11D4A +:1004F000B11D80939C0090939D00A0939E00B093AB +:100500009F00BF91AF919F918F913F912F910F903D +:100510000FBE0F901F9018950196A11DB11DD4CF4D +:100520002FB7F894609198007091990080919A008B +:1005300090919B002FBF08958230910538F0880F6D +:10054000991F880F991F05970197F1F708957894DF +:1005500083B7887F836083BF789489B7826089BFBF +:100560007FDF86B1876886B9379A08951F93CF9346 +:10057000DF93182FEB0161E04FD01C161D0634F0FD +:1005800060E0812FDF91CF911F919AC0CF3FD105BD +:1005900014F061E0F6CFE12FF0E0EA5DFF4FE49167 +:1005A000E33059F487B58F7787BD87B5806487BD01 +:1005B000CDBDDF91CF911F910895E43041F487B50F +:1005C0008F7D87BD87B5806187BDCCBDF2CFE5301B +:1005D00041F487B5877F87BD87B5846087BDCABD75 +:1005E000E8CFC038D105ACF6CBCF833021F480B74B +:1005F0008F7780BF0895843039F487B58F7D87BDAC +:1006000087B58F7E87BD08958530E9F787B5877FE9 +:1006100087BD87B58B7FF6CFCF93DF9387FF0CC065 +:100620008F77833048F0282F30E0A90143505109DB +:100630004430510540F5895F90E0FC01EA5CFF4FD2 +:1006400024918A5B9F4FFC0184918823C9F090E03C +:10065000880F991FFC01EE59FF4FA591B491FC0141 +:10066000E45AFF4FC591D491611117C09FB7F89418 +:100670008C91209582238C938881282328839FBF87 +:10068000DF91CF910895275031099CE0981B892F65 +:100690002330310588F28FEFCFCF623051F49FB70E +:1006A000F8943C91822F809583238C93E8812E2BA4 +:1006B000E5CF8FB7F894EC912E2B2C938FBFE0CF22 +:1006C0001F93CF93DF93162F87FF0CC08F77833054 +:1006D00048F0282F30E0A90143505109443051051A +:1006E00040F5895F282F30E0F901EA5DFF4F8491E2 +:1006F000F901EA5CFF4FD491F901EA5BFF4FC49125 +:10070000CC2399F0811171DFEC2FF0E0EE0FFF1F89 +:10071000E45AFF4FA591B4918FB7111114C0F8940A +:10072000EC91D095DE23DC938FBFDF91CF911F91A9 +:100730000895275031099CE0981B892F23303105FB +:1007400088F28FEFCFCFF894EC91DE2BECCFCF93E4 +:10075000DF9387FF0CC08F77833048F0282F30E07D +:10076000A901435051094430510520F5895F282FD4 +:1007700030E0F901EA5DFF4F8491F901EA5CFF4F37 +:10078000D491F901EA5BFF4FC491CC23E9F08111C8 +:100790002CDFEC2FF0E0EE0FFF1FEA5AFF4FA59180 +:1007A000B491EC91ED2381E090E009F480E0DF91D9 +:1007B000CF910895275031099CE0981B892F233051 +:1007C0003105A8F28FEFD3CF80E090E0F0CF81B772 +:0E07D00081BFBDDE6FDC91DDFECFF894FFCF60 +:1007DE002828286F00FF8000800080FFFF0000FFA8 +:1007EE00FF0000FF00FF8000FFFFFF32000000014E +:0207FE000100F8 +:00000001FF diff --git a/pocketpsithemius.ino.lst b/pocketpsithemius.ino.lst new file mode 100644 index 0000000..3618968 --- /dev/null +++ b/pocketpsithemius.ino.lst @@ -0,0 +1,1644 @@ + +C:\Users\flux\AppData\Local\Temp\arduino_build_587547/pocketpsithemius.ino.elf: file format elf32-avr + + +Disassembly of section .text: + +00000000 <__vectors>: +__vectors(): + 0: 33 c0 rjmp .+102 ; 0x68 <__ctors_end> + 2: 4b c0 rjmp .+150 ; 0x9a <__bad_interrupt> + 4: 4a c0 rjmp .+148 ; 0x9a <__bad_interrupt> + 6: 49 c0 rjmp .+146 ; 0x9a <__bad_interrupt> + 8: 48 c0 rjmp .+144 ; 0x9a <__bad_interrupt> + a: 47 c0 rjmp .+142 ; 0x9a <__bad_interrupt> + c: 3f c2 rjmp .+1150 ; 0x48c <__vector_6> + e: 45 c0 rjmp .+138 ; 0x9a <__bad_interrupt> + 10: 44 c0 rjmp .+136 ; 0x9a <__bad_interrupt> + 12: 43 c0 rjmp .+134 ; 0x9a <__bad_interrupt> + 14: 42 c0 rjmp .+132 ; 0x9a <__bad_interrupt> + 16: 41 c0 rjmp .+130 ; 0x9a <__bad_interrupt> + 18: 40 c0 rjmp .+128 ; 0x9a <__bad_interrupt> + 1a: 3f c0 rjmp .+126 ; 0x9a <__bad_interrupt> + 1c: 3e c0 rjmp .+124 ; 0x9a <__bad_interrupt> + 1e: 3d c0 rjmp .+122 ; 0x9a <__bad_interrupt> + 20: 3c c0 rjmp .+120 ; 0x9a <__bad_interrupt> + 22: 3b c0 rjmp .+118 ; 0x9a <__bad_interrupt> + 24: 3a c0 rjmp .+116 ; 0x9a <__bad_interrupt> + +00000026 <__trampolines_end>: +__trampolines_start(): + 26: 00 00 nop + 28: 00 00 nop + 2a: 05 00 .word 0x0005 ; ???? + 2c: 04 00 .word 0x0004 ; ???? + 2e: 03 00 .word 0x0003 ; ???? + 30: 00 00 nop + 32: 00 00 nop + ... + +00000036 : + 36: 01 02 04 40 20 10 08 04 02 01 10 20 40 80 08 80 ...@ ...... @... + +00000046 : + 46: 01 01 01 02 02 02 02 02 02 02 01 01 01 01 01 02 ................ + +00000056 : + 56: 00 00 39 00 36 00 ..9.6. + +0000005c : + 5c: 00 00 3b 00 38 00 ..;.8. + +00000062 : + 62: 00 00 3a 00 37 00 ..:.7. + +00000068 <__ctors_end>: +__dtors_end(): + 68: 11 24 eor r1, r1 + 6a: 1f be out 0x3f, r1 ; 63 + 6c: cf ed ldi r28, 0xDF ; 223 + 6e: cd bf out 0x3d, r28 ; 61 + +00000070 <__do_copy_data>: +__do_copy_data(): +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2409 + 70: 10 e0 ldi r17, 0x00 ; 0 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2410 + 72: a0 e6 ldi r26, 0x60 ; 96 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2411 + 74: b0 e0 ldi r27, 0x00 ; 0 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2412 + 76: ee ed ldi r30, 0xDE ; 222 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2413 + 78: f7 e0 ldi r31, 0x07 ; 7 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2414 + 7a: 02 c0 rjmp .+4 ; 0x80 <__do_copy_data+0x10> +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2417 + 7c: 05 90 lpm r0, Z+ +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2422 + 7e: 0d 92 st X+, r0 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2424 + 80: a2 38 cpi r26, 0x82 ; 130 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2425 + 82: b1 07 cpc r27, r17 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2426 + 84: d9 f7 brne .-10 ; 0x7c <__do_copy_data+0xc> + +00000086 <__do_clear_bss>: +__do_clear_bss(): +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2441 + 86: 20 e0 ldi r18, 0x00 ; 0 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2442 + 88: a2 e8 ldi r26, 0x82 ; 130 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2443 + 8a: b0 e0 ldi r27, 0x00 ; 0 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2444 + 8c: 01 c0 rjmp .+2 ; 0x90 <.do_clear_bss_start> + +0000008e <.do_clear_bss_loop>: +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2446 + 8e: 1d 92 st X+, r1 + +00000090 <.do_clear_bss_start>: +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2448 + 90: a0 3a cpi r26, 0xA0 ; 160 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2449 + 92: b2 07 cpc r27, r18 +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2450 + 94: e1 f7 brne .-8 ; 0x8e <.do_clear_bss_loop> +.do_clear_bss_start(): + 96: 9b d3 rcall .+1846 ; 0x7ce
+ 98: a0 c3 rjmp .+1856 ; 0x7da <_exit> + +0000009a <__bad_interrupt>: +__vector_1(): + 9a: b2 cf rjmp .-156 ; 0x0 <__vectors> + +0000009c : +_Z7offLedsv(): +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:80 + selectedColor = paint; + selectedColor.r = paint.r; + selectedColor.b = paint.b; + selectedColor.g = paint.g; + //paint contains r g b value for pwm on pins + showColor(); + 9c: 6f ef ldi r22, 0xFF ; 255 + 9e: 70 e0 ldi r23, 0x00 ; 0 + a0: 8c e0 ldi r24, 0x0C ; 12 + a2: 64 d2 rcall .+1224 ; 0x56c + a4: 6f ef ldi r22, 0xFF ; 255 + a6: 70 e0 ldi r23, 0x00 ; 0 + a8: 81 e0 ldi r24, 0x01 ; 1 + aa: 60 d2 rcall .+1216 ; 0x56c + ac: 6f ef ldi r22, 0xFF ; 255 + ae: 70 e0 ldi r23, 0x00 ; 0 + b0: 8e e0 ldi r24, 0x0E ; 14 + b2: 5c c2 rjmp .+1208 ; 0x56c + +000000b4 : +setup(): + b4: 60 e0 ldi r22, 0x00 ; 0 + b6: 89 e0 ldi r24, 0x09 ; 9 + b8: af d2 rcall .+1374 ; 0x618 + ba: 60 e0 ldi r22, 0x00 ; 0 + bc: 88 e0 ldi r24, 0x08 ; 8 + be: ac d2 rcall .+1368 ; 0x618 + c0: 60 e0 ldi r22, 0x00 ; 0 + c2: 8d e0 ldi r24, 0x0D ; 13 + c4: a9 d2 rcall .+1362 ; 0x618 + c6: 61 e0 ldi r22, 0x01 ; 1 + c8: 81 e0 ldi r24, 0x01 ; 1 + ca: a6 d2 rcall .+1356 ; 0x618 + cc: 61 e0 ldi r22, 0x01 ; 1 + ce: 8e e0 ldi r24, 0x0E ; 14 + d0: a3 d2 rcall .+1350 ; 0x618 + d2: 61 e0 ldi r22, 0x01 ; 1 + d4: 8c e0 ldi r24, 0x0C ; 12 + d6: a0 d2 rcall .+1344 ; 0x618 + d8: e1 df rcall .-62 ; 0x9c + da: 61 e0 ldi r22, 0x01 ; 1 + dc: 86 e0 ldi r24, 0x06 ; 6 + de: 9c d2 rcall .+1336 ; 0x618 + e0: 60 e0 ldi r22, 0x00 ; 0 + e2: 86 e0 ldi r24, 0x06 ; 6 + e4: ed d2 rcall .+1498 ; 0x6c0 + e6: 61 e0 ldi r22, 0x01 ; 1 + e8: 83 e0 ldi r24, 0x03 ; 3 + ea: 96 d2 rcall .+1324 ; 0x618 + ec: 60 e0 ldi r22, 0x00 ; 0 + ee: 83 e0 ldi r24, 0x03 ; 3 + f0: e7 c2 rjmp .+1486 ; 0x6c0 + +000000f2 : +_Z13pressButton_Bv(): + f2: cf 93 push r28 + f4: 80 91 7f 00 lds r24, 0x007F ; 0x80007f + f8: 81 11 cpse r24, r1 + fa: 04 c0 rjmp .+8 ; 0x104 + fc: 10 92 95 00 sts 0x0095, r1 ; 0x800095 + 100: cf 91 pop r28 + 102: 08 95 ret + 104: c0 91 95 00 lds r28, 0x0095 ; 0x800095 + 108: c1 30 cpi r28, 0x01 ; 1 + 10a: a1 f4 brne .+40 ; 0x134 + 10c: 80 91 90 00 lds r24, 0x0090 ; 0x800090 + 110: 80 93 8f 00 sts 0x008F, r24 ; 0x80008f + 114: 10 92 90 00 sts 0x0090, r1 ; 0x800090 + 118: 10 92 96 00 sts 0x0096, r1 ; 0x800096 + 11c: 10 92 94 00 sts 0x0094, r1 ; 0x800094 + 120: 10 92 80 00 sts 0x0080, r1 ; 0x800080 + 124: 60 e0 ldi r22, 0x00 ; 0 + 126: 83 e0 ldi r24, 0x03 ; 3 + 128: cb d2 rcall .+1430 ; 0x6c0 + 12a: 61 e0 ldi r22, 0x01 ; 1 + 12c: 86 e0 ldi r24, 0x06 ; 6 + 12e: c8 d2 rcall .+1424 ; 0x6c0 + 130: c0 93 8d 00 sts 0x008D, r28 ; 0x80008d + 134: 80 91 95 00 lds r24, 0x0095 ; 0x800095 + 138: 82 30 cpi r24, 0x02 ; 2 + 13a: 11 f7 brne .-60 ; 0x100 + 13c: 86 e0 ldi r24, 0x06 ; 6 + 13e: 07 d3 rcall .+1550 ; 0x74e + 140: 01 97 sbiw r24, 0x01 ; 1 + 142: 19 f4 brne .+6 ; 0x14a + 144: 60 e0 ldi r22, 0x00 ; 0 + 146: 86 e0 ldi r24, 0x06 ; 6 + 148: bb d2 rcall .+1398 ; 0x6c0 + 14a: 81 e0 ldi r24, 0x01 ; 1 + 14c: 80 93 80 00 sts 0x0080, r24 ; 0x800080 + 150: 80 93 7f 00 sts 0x007F, r24 ; 0x80007f + 154: 80 91 8f 00 lds r24, 0x008F ; 0x80008f + 158: 80 93 90 00 sts 0x0090, r24 ; 0x800090 + 15c: 10 92 8d 00 sts 0x008D, r1 ; 0x80008d + 160: cf cf rjmp .-98 ; 0x100 + +00000162 : +_Z13pressButton_Cv(): + 162: 80 91 80 00 lds r24, 0x0080 ; 0x800080 + 166: 81 11 cpse r24, r1 + 168: 03 c0 rjmp .+6 ; 0x170 + 16a: 10 92 94 00 sts 0x0094, r1 ; 0x800094 + 16e: 08 95 ret + 170: 80 91 94 00 lds r24, 0x0094 ; 0x800094 + 174: 81 30 cpi r24, 0x01 ; 1 + 176: 19 f4 brne .+6 ; 0x17e + 178: 61 e0 ldi r22, 0x01 ; 1 + 17a: 83 e0 ldi r24, 0x03 ; 3 + 17c: a1 d2 rcall .+1346 ; 0x6c0 + 17e: 80 91 94 00 lds r24, 0x0094 ; 0x800094 + 182: 82 30 cpi r24, 0x02 ; 2 + 184: 19 f4 brne .+6 ; 0x18c + 186: 60 e0 ldi r22, 0x00 ; 0 + 188: 83 e0 ldi r24, 0x03 ; 3 + 18a: 9a c2 rjmp .+1332 ; 0x6c0 + 18c: 08 95 ret + +0000018e : +_Z7softPWMhhh(): + 18e: ef 92 push r14 + 190: ff 92 push r15 + 192: 0f 93 push r16 + 194: 1f 93 push r17 + 196: cf 93 push r28 + 198: df 93 push r29 + 19a: 18 2f mov r17, r24 + 19c: 04 2f mov r16, r20 + 19e: 80 91 8e 00 lds r24, 0x008E ; 0x80008e + 1a2: 88 23 and r24, r24 + 1a4: 99 f0 breq .+38 ; 0x1cc + 1a6: e6 2e mov r14, r22 + 1a8: f1 2c mov r15, r1 + 1aa: 60 95 com r22 + 1ac: c6 2f mov r28, r22 + 1ae: d0 e0 ldi r29, 0x00 ; 0 + 1b0: 00 23 and r16, r16 + 1b2: d1 f0 breq .+52 ; 0x1e8 + 1b4: 60 e0 ldi r22, 0x00 ; 0 + 1b6: 81 2f mov r24, r17 + 1b8: 83 d2 rcall .+1286 ; 0x6c0 + 1ba: c7 01 movw r24, r14 + 1bc: bd d1 rcall .+890 ; 0x538 + 1be: 61 e0 ldi r22, 0x01 ; 1 + 1c0: 81 2f mov r24, r17 + 1c2: 7e d2 rcall .+1276 ; 0x6c0 + 1c4: ce 01 movw r24, r28 + 1c6: b8 d1 rcall .+880 ; 0x538 + 1c8: 01 50 subi r16, 0x01 ; 1 + 1ca: f2 cf rjmp .-28 ; 0x1b0 + 1cc: 8f ef ldi r24, 0xFF ; 255 + 1ce: 90 e0 ldi r25, 0x00 ; 0 + 1d0: 9c 01 movw r18, r24 + 1d2: 26 1b sub r18, r22 + 1d4: 31 09 sbc r19, r1 + 1d6: b9 01 movw r22, r18 + 1d8: 81 2f mov r24, r17 + 1da: df 91 pop r29 + 1dc: cf 91 pop r28 + 1de: 1f 91 pop r17 + 1e0: 0f 91 pop r16 + 1e2: ff 90 pop r15 + 1e4: ef 90 pop r14 + 1e6: c2 c1 rjmp .+900 ; 0x56c + 1e8: df 91 pop r29 + 1ea: cf 91 pop r28 + 1ec: 1f 91 pop r17 + 1ee: 0f 91 pop r16 + 1f0: ff 90 pop r15 + 1f2: ef 90 pop r14 + 1f4: 08 95 ret + +000001f6 : +_Z9showColorv(): + 1f6: 80 91 90 00 lds r24, 0x0090 ; 0x800090 + 1fa: 88 23 and r24, r24 + 1fc: 79 f0 breq .+30 ; 0x21c + 1fe: 41 e0 ldi r20, 0x01 ; 1 + 200: 60 91 82 00 lds r22, 0x0082 ; 0x800082 <__data_end> + 204: 8c e0 ldi r24, 0x0C ; 12 + 206: c3 df rcall .-122 ; 0x18e + 208: 41 e0 ldi r20, 0x01 ; 1 + 20a: 60 91 84 00 lds r22, 0x0084 ; 0x800084 <__data_end+0x2> + 20e: 81 e0 ldi r24, 0x01 ; 1 + 210: be df rcall .-132 ; 0x18e + 212: 41 e0 ldi r20, 0x01 ; 1 + 214: 60 91 83 00 lds r22, 0x0083 ; 0x800083 <__data_end+0x1> + 218: 8e e0 ldi r24, 0x0E ; 14 + 21a: b9 cf rjmp .-142 ; 0x18e + 21c: 3f cf rjmp .-386 ; 0x9c + +0000021e : +_Z8setColor5COLORb(): +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:75 +}; +COLOR selectedColor = { 0 , 0 , 0 }; + +void setColor(COLOR paint, bool full = true) { + //tricolor LED color + selectedColor = paint; + 21e: 60 93 82 00 sts 0x0082, r22 ; 0x800082 <__data_end> + 222: 70 93 83 00 sts 0x0083, r23 ; 0x800083 <__data_end+0x1> + 226: 80 93 84 00 sts 0x0084, r24 ; 0x800084 <__data_end+0x2> +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:80 + selectedColor.r = paint.r; + selectedColor.b = paint.b; + selectedColor.g = paint.g; + //paint contains r g b value for pwm on pins + showColor(); + 22a: e5 cf rjmp .-54 ; 0x1f6 + +0000022c : +_Z13pressButton_Av(): +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:190 +} + +//---- BUTTON STATE MACHINE FUNCTIONS +//Button A: +void pressButton_A() { + if (enabled_btnAC == false) { + 22c: 80 91 80 00 lds r24, 0x0080 ; 0x800080 + 230: 81 11 cpse r24, r1 + 232: 03 c0 rjmp .+6 ; 0x23a +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:228 + case 9: + setColor(grey, true); + break; + case 10: + enabled_LED = false; + counterA = 0;//TURN OFF + 234: 10 92 96 00 sts 0x0096, r1 ; 0x800096 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:231 + break; + } +} + 238: 08 95 ret +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:194 +void pressButton_A() { + if (enabled_btnAC == false) { + counterA = 0; + return;//Chek if button is disabled + } + switch (counterA) { + 23a: e0 91 96 00 lds r30, 0x0096 ; 0x800096 + 23e: e1 50 subi r30, 0x01 ; 1 + 240: ea 30 cpi r30, 0x0A ; 10 + 242: d0 f7 brcc .-12 ; 0x238 + 244: f0 e0 ldi r31, 0x00 ; 0 + 246: ea 5d subi r30, 0xDA ; 218 + 248: fe 4f sbci r31, 0xFE ; 254 + 24a: 09 94 ijmp + 24c: 09 c0 rjmp .+18 ; 0x260 + 24e: 12 c0 rjmp .+36 ; 0x274 + 250: 1b c0 rjmp .+54 ; 0x288 + 252: 23 c0 rjmp .+70 ; 0x29a + 254: 29 c0 rjmp .+82 ; 0x2a8 + 256: 2f c0 rjmp .+94 ; 0x2b6 + 258: 35 c0 rjmp .+106 ; 0x2c4 + 25a: 3e c0 rjmp .+124 ; 0x2d8 + 25c: 44 c0 rjmp .+136 ; 0x2e6 + 25e: 4a c0 rjmp .+148 ; 0x2f4 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:196 + case 1: + enabled_LED = true; + 260: 81 e0 ldi r24, 0x01 ; 1 + 262: 80 93 90 00 sts 0x0090, r24 ; 0x800090 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:197 + setColor(white, true); + 266: 60 91 78 00 lds r22, 0x0078 ; 0x800078 + 26a: 70 91 79 00 lds r23, 0x0079 ; 0x800079 + 26e: 80 91 7a 00 lds r24, 0x007A ; 0x80007a +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:224 + break; + case 8: + setColor(indigo, true); + break; + case 9: + setColor(grey, true); + 272: d5 cf rjmp .-86 ; 0x21e +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:200 + case 1: + enabled_LED = true; + setColor(white, true); + break; + case 2: + usePWM = true; + 274: 81 e0 ldi r24, 0x01 ; 1 + 276: 80 93 8e 00 sts 0x008E, r24 ; 0x80008e +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:201 + setColor(orange, true); + 27a: 60 91 75 00 lds r22, 0x0075 ; 0x800075 + 27e: 70 91 76 00 lds r23, 0x0076 ; 0x800076 + 282: 80 91 77 00 lds r24, 0x0077 ; 0x800077 + 286: f5 cf rjmp .-22 ; 0x272 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:204 + break; + case 3: + usePWM = false; + 288: 10 92 8e 00 sts 0x008E, r1 ; 0x80008e +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:205 + setColor(green, true); + 28c: 60 91 72 00 lds r22, 0x0072 ; 0x800072 + 290: 70 91 73 00 lds r23, 0x0073 ; 0x800073 + 294: 80 91 74 00 lds r24, 0x0074 ; 0x800074 + 298: ec cf rjmp .-40 ; 0x272 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:208 + break; + case 4: + setColor(yellow, true); + 29a: 60 91 6f 00 lds r22, 0x006F ; 0x80006f + 29e: 70 91 70 00 lds r23, 0x0070 ; 0x800070 + 2a2: 80 91 71 00 lds r24, 0x0071 ; 0x800071 + 2a6: e5 cf rjmp .-54 ; 0x272 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:211 + break; + case 5: + setColor(red, true); + 2a8: 60 91 6c 00 lds r22, 0x006C ; 0x80006c + 2ac: 70 91 6d 00 lds r23, 0x006D ; 0x80006d + 2b0: 80 91 6e 00 lds r24, 0x006E ; 0x80006e + 2b4: de cf rjmp .-68 ; 0x272 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:214 + break; + case 6: + setColor(blue, true); + 2b6: 60 91 69 00 lds r22, 0x0069 ; 0x800069 + 2ba: 70 91 6a 00 lds r23, 0x006A ; 0x80006a + 2be: 80 91 6b 00 lds r24, 0x006B ; 0x80006b + 2c2: d7 cf rjmp .-82 ; 0x272 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:217 + break; + case 7: + usePWM = true; + 2c4: 81 e0 ldi r24, 0x01 ; 1 + 2c6: 80 93 8e 00 sts 0x008E, r24 ; 0x80008e +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:218 + setColor(purple, true); + 2ca: 60 91 66 00 lds r22, 0x0066 ; 0x800066 + 2ce: 70 91 67 00 lds r23, 0x0067 ; 0x800067 + 2d2: 80 91 68 00 lds r24, 0x0068 ; 0x800068 + 2d6: cd cf rjmp .-102 ; 0x272 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:221 + break; + case 8: + setColor(indigo, true); + 2d8: 60 91 63 00 lds r22, 0x0063 ; 0x800063 + 2dc: 70 91 64 00 lds r23, 0x0064 ; 0x800064 + 2e0: 80 91 65 00 lds r24, 0x0065 ; 0x800065 + 2e4: c6 cf rjmp .-116 ; 0x272 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:224 + break; + case 9: + setColor(grey, true); + 2e6: 60 91 60 00 lds r22, 0x0060 ; 0x800060 <__data_start> + 2ea: 70 91 61 00 lds r23, 0x0061 ; 0x800061 <__data_start+0x1> + 2ee: 80 91 62 00 lds r24, 0x0062 ; 0x800062 <__data_start+0x2> + 2f2: bf cf rjmp .-130 ; 0x272 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:227 + break; + case 10: + enabled_LED = false; + 2f4: 10 92 90 00 sts 0x0090, r1 ; 0x800090 + 2f8: 9d cf rjmp .-198 ; 0x234 + +000002fa : +loop(): +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:128 + pinMode(OPAMP, OUTPUT); + digitalWrite(OPAMP, OFF); +} + +//---- DEVICE LOOP ---- +void loop() { + 2fa: 0f 93 push r16 + 2fc: 1f 93 push r17 + 2fe: cf 93 push r28 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:131 + + // Detect and debounce button presses + if ( (millis() - lastDebounceTime) > debounceDelay) { + 300: 0f d1 rcall .+542 ; 0x520 + 302: 00 91 85 00 lds r16, 0x0085 ; 0x800085 + 306: 10 91 86 00 lds r17, 0x0086 ; 0x800086 + 30a: 20 91 87 00 lds r18, 0x0087 ; 0x800087 + 30e: 30 91 88 00 lds r19, 0x0088 ; 0x800088 + 312: 60 1b sub r22, r16 + 314: 71 0b sbc r23, r17 + 316: 82 0b sbc r24, r18 + 318: 93 0b sbc r25, r19 + 31a: 00 91 7b 00 lds r16, 0x007B ; 0x80007b + 31e: 10 91 7c 00 lds r17, 0x007C ; 0x80007c + 322: 20 91 7d 00 lds r18, 0x007D ; 0x80007d + 326: 30 91 7e 00 lds r19, 0x007E ; 0x80007e + 32a: 06 17 cp r16, r22 + 32c: 17 07 cpc r17, r23 + 32e: 28 07 cpc r18, r24 + 330: 39 07 cpc r19, r25 + 332: 08 f0 brcs .+2 ; 0x336 + 334: 4e c0 rjmp .+156 ; 0x3d2 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:134 + + //Button A: + bool pressed_btnA = !digitalRead(btnA); + 336: 89 e0 ldi r24, 0x09 ; 9 + 338: 0a d2 rcall .+1044 ; 0x74e + 33a: c1 e0 ldi r28, 0x01 ; 1 + 33c: 00 97 sbiw r24, 0x00 ; 0 + 33e: 09 f0 breq .+2 ; 0x342 + 340: c0 e0 ldi r28, 0x00 ; 0 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:135 + if (pressed_btnA != last_btnA ) { + 342: 20 91 93 00 lds r18, 0x0093 ; 0x800093 + 346: 2c 17 cp r18, r28 + 348: 69 f0 breq .+26 ; 0x364 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:136 + if (pressed_btnA == true) { + 34a: 89 2b or r24, r25 + 34c: 49 f4 brne .+18 ; 0x360 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:137 + counterA++; + 34e: 80 91 96 00 lds r24, 0x0096 ; 0x800096 + 352: 8f 5f subi r24, 0xFF ; 255 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:138 + if (counterA > 10)counterA = 1; + 354: 8b 30 cpi r24, 0x0B ; 11 + 356: 08 f0 brcs .+2 ; 0x35a + 358: 74 c0 rjmp .+232 ; 0x442 <__LOCK_REGION_LENGTH__+0x42> +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:138 (discriminator 1) + 35a: 80 93 96 00 sts 0x0096, r24 ; 0x800096 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:139 (discriminator 1) + pressButton_A(); + 35e: 66 df rcall .-308 ; 0x22c +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:141 + } + last_btnA = pressed_btnA; + 360: c0 93 93 00 sts 0x0093, r28 ; 0x800093 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:145 + } + + //Button B: + bool pressed_btnB = !digitalRead(btnB); + 364: 88 e0 ldi r24, 0x08 ; 8 + 366: f3 d1 rcall .+998 ; 0x74e + 368: c1 e0 ldi r28, 0x01 ; 1 + 36a: 00 97 sbiw r24, 0x00 ; 0 + 36c: 09 f0 breq .+2 ; 0x370 + 36e: c0 e0 ldi r28, 0x00 ; 0 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:146 + if (pressed_btnB != last_btnB ) { + 370: 20 91 92 00 lds r18, 0x0092 ; 0x800092 + 374: 2c 17 cp r18, r28 + 376: 69 f0 breq .+26 ; 0x392 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:147 + if (pressed_btnB == true) { + 378: 89 2b or r24, r25 + 37a: 49 f4 brne .+18 ; 0x38e +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:148 + counterB++; + 37c: 80 91 95 00 lds r24, 0x0095 ; 0x800095 + 380: 8f 5f subi r24, 0xFF ; 255 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:149 + if (counterB > 2)counterB = 1; + 382: 83 30 cpi r24, 0x03 ; 3 + 384: 08 f0 brcs .+2 ; 0x388 + 386: 5f c0 rjmp .+190 ; 0x446 <__LOCK_REGION_LENGTH__+0x46> +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:149 (discriminator 1) + 388: 80 93 95 00 sts 0x0095, r24 ; 0x800095 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:150 (discriminator 1) + pressButton_B(); + 38c: b2 de rcall .-668 ; 0xf2 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:152 + } + last_btnB = pressed_btnB; + 38e: c0 93 92 00 sts 0x0092, r28 ; 0x800092 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:156 + } + + //Button C: + bool pressed_btnC = !digitalRead(btnC); + 392: 8d e0 ldi r24, 0x0D ; 13 + 394: dc d1 rcall .+952 ; 0x74e + 396: c1 e0 ldi r28, 0x01 ; 1 + 398: 00 97 sbiw r24, 0x00 ; 0 + 39a: 09 f0 breq .+2 ; 0x39e + 39c: c0 e0 ldi r28, 0x00 ; 0 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:157 + if (pressed_btnC != last_btnC ) { + 39e: 20 91 91 00 lds r18, 0x0091 ; 0x800091 + 3a2: 2c 17 cp r18, r28 + 3a4: 69 f0 breq .+26 ; 0x3c0 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:158 + if (pressed_btnC == true) { + 3a6: 89 2b or r24, r25 + 3a8: 49 f4 brne .+18 ; 0x3bc +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:159 + counterC++; + 3aa: 80 91 94 00 lds r24, 0x0094 ; 0x800094 + 3ae: 8f 5f subi r24, 0xFF ; 255 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:160 + if (counterC > 2)counterC = 1; + 3b0: 83 30 cpi r24, 0x03 ; 3 + 3b2: 08 f0 brcs .+2 ; 0x3b6 + 3b4: 4a c0 rjmp .+148 ; 0x44a <__LOCK_REGION_LENGTH__+0x4a> +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:160 (discriminator 1) + 3b6: 80 93 94 00 sts 0x0094, r24 ; 0x800094 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:161 (discriminator 1) + pressButton_C(); + 3ba: d3 de rcall .-602 ; 0x162 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:163 + } + last_btnC = pressed_btnC; + 3bc: c0 93 91 00 sts 0x0091, r28 ; 0x800091 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:165 + } + lastDebounceTime = millis(); //set the current time + 3c0: af d0 rcall .+350 ; 0x520 + 3c2: 60 93 85 00 sts 0x0085, r22 ; 0x800085 + 3c6: 70 93 86 00 sts 0x0086, r23 ; 0x800086 + 3ca: 80 93 87 00 sts 0x0087, r24 ; 0x800087 + 3ce: 90 93 88 00 sts 0x0088, r25 ; 0x800088 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:168 + } + + showColor(); + 3d2: 11 df rcall .-478 ; 0x1f6 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:171 + + //Counts up and turns UV LED off after 1min + if (countDelay == true) { + 3d4: 80 91 8d 00 lds r24, 0x008D ; 0x80008d + 3d8: 88 23 and r24, r24 + 3da: c9 f1 breq .+114 ; 0x44e <__LOCK_REGION_LENGTH__+0x4e> +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:172 + delayCount++; + 3dc: 80 91 89 00 lds r24, 0x0089 ; 0x800089 + 3e0: 90 91 8a 00 lds r25, 0x008A ; 0x80008a + 3e4: a0 91 8b 00 lds r26, 0x008B ; 0x80008b + 3e8: b0 91 8c 00 lds r27, 0x008C ; 0x80008c + 3ec: 01 96 adiw r24, 0x01 ; 1 + 3ee: a1 1d adc r26, r1 + 3f0: b1 1d adc r27, r1 + 3f2: 80 93 89 00 sts 0x0089, r24 ; 0x800089 + 3f6: 90 93 8a 00 sts 0x008A, r25 ; 0x80008a + 3fa: a0 93 8b 00 sts 0x008B, r26 ; 0x80008b + 3fe: b0 93 8c 00 sts 0x008C, r27 ; 0x80008c +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:173 + counterB = 1; + 402: 81 e0 ldi r24, 0x01 ; 1 + 404: 80 93 95 00 sts 0x0095, r24 ; 0x800095 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:176 + } + else delayCount = 0; + if (delayCount > 1200000) { + 408: 80 91 89 00 lds r24, 0x0089 ; 0x800089 + 40c: 90 91 8a 00 lds r25, 0x008A ; 0x80008a + 410: a0 91 8b 00 lds r26, 0x008B ; 0x80008b + 414: b0 91 8c 00 lds r27, 0x008C ; 0x80008c + 418: 81 38 cpi r24, 0x81 ; 129 + 41a: 9f 44 sbci r25, 0x4F ; 79 + 41c: a2 41 sbci r26, 0x12 ; 18 + 41e: b1 05 cpc r27, r1 + 420: 60 f0 brcs .+24 ; 0x43a <__LOCK_REGION_LENGTH__+0x3a> +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:178 + //Turn the UV LED off + digitalWrite(uv_LED, LOW); + 422: 60 e0 ldi r22, 0x00 ; 0 + 424: 86 e0 ldi r24, 0x06 ; 6 + 426: 4c d1 rcall .+664 ; 0x6c0 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:179 + countDelay = false; + 428: 10 92 8d 00 sts 0x008D, r1 ; 0x80008d +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:181 + //Reenable all buttons + enabled_btnAC = true; + 42c: 81 e0 ldi r24, 0x01 ; 1 + 42e: 80 93 80 00 sts 0x0080, r24 ; 0x800080 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:183 + //LED Status back to before Button B was pushed + enabled_LED = was_on_LED; + 432: 80 91 8f 00 lds r24, 0x008F ; 0x80008f + 436: 80 93 90 00 sts 0x0090, r24 ; 0x800090 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:185 + } +} + 43a: cf 91 pop r28 + 43c: 1f 91 pop r17 + 43e: 0f 91 pop r16 + 440: 08 95 ret +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:138 (discriminator 1) + //Button A: + bool pressed_btnA = !digitalRead(btnA); + if (pressed_btnA != last_btnA ) { + if (pressed_btnA == true) { + counterA++; + if (counterA > 10)counterA = 1; + 442: 81 e0 ldi r24, 0x01 ; 1 + 444: 8a cf rjmp .-236 ; 0x35a +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:149 (discriminator 1) + //Button B: + bool pressed_btnB = !digitalRead(btnB); + if (pressed_btnB != last_btnB ) { + if (pressed_btnB == true) { + counterB++; + if (counterB > 2)counterB = 1; + 446: 81 e0 ldi r24, 0x01 ; 1 + 448: 9f cf rjmp .-194 ; 0x388 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:160 (discriminator 1) + //Button C: + bool pressed_btnC = !digitalRead(btnC); + if (pressed_btnC != last_btnC ) { + if (pressed_btnC == true) { + counterC++; + if (counterC > 2)counterC = 1; + 44a: 81 e0 ldi r24, 0x01 ; 1 + 44c: b4 cf rjmp .-152 ; 0x3b6 +F:\Projects\research\trithemius\rev8\firmware\SECUND MILESTONE - CODE(finished tested video)\pocketpsithemius/pocketpsithemius.ino:175 + //Counts up and turns UV LED off after 1min + if (countDelay == true) { + delayCount++; + counterB = 1; + } + else delayCount = 0; + 44e: 10 92 89 00 sts 0x0089, r1 ; 0x800089 + 452: 10 92 8a 00 sts 0x008A, r1 ; 0x80008a + 456: 10 92 8b 00 sts 0x008B, r1 ; 0x80008b + 45a: 10 92 8c 00 sts 0x008C, r1 ; 0x80008c + 45e: d4 cf rjmp .-88 ; 0x408 <__LOCK_REGION_LENGTH__+0x8> + +00000460 : +initToneTimerInternal(): +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring.c:642 +PLLCSR |= PCKE; +} +#endif + #if INITIALIZE_SECONDARY_TIMERS + // Prepare the timer for PWM + initToneTimerInternal(); + 460: 8f b5 in r24, 0x2f ; 47 + 462: 80 7f andi r24, 0xF0 ; 240 + 464: 8f bd out 0x2f, r24 ; 47 + 466: 80 b7 in r24, 0x30 ; 48 + 468: 82 60 ori r24, 0x02 ; 2 + 46a: 80 bf out 0x30, r24 ; 48 + 46c: 80 b7 in r24, 0x30 ; 48 + 46e: 81 60 ori r24, 0x01 ; 1 + 470: 80 bf out 0x30, r24 ; 48 + 472: 87 b5 in r24, 0x27 ; 39 + 474: 81 60 ori r24, 0x01 ; 1 + 476: 87 bd out 0x27, r24 ; 39 + 478: 86 b5 in r24, 0x26 ; 38 + 47a: 8d 7f andi r24, 0xFD ; 253 + 47c: 86 bd out 0x26, r24 ; 38 + 47e: 86 b5 in r24, 0x26 ; 38 + 480: 81 60 ori r24, 0x01 ; 1 + 482: 86 bd out 0x26, r24 ; 38 + 484: 8f b5 in r24, 0x2f ; 47 + 486: 87 60 ori r24, 0x07 ; 7 + 488: 8f bd out 0x2f, r24 ; 47 + 48a: 08 95 ret + +0000048c <__vector_6>: +__vector_6(): + 48c: 1f 92 push r1 + 48e: 0f 92 push r0 + 490: 0f b6 in r0, 0x3f ; 63 + 492: 0f 92 push r0 + 494: 11 24 eor r1, r1 + 496: 2f 93 push r18 + 498: 3f 93 push r19 + 49a: 8f 93 push r24 + 49c: 9f 93 push r25 + 49e: af 93 push r26 + 4a0: bf 93 push r27 + 4a2: 80 91 98 00 lds r24, 0x0098 ; 0x800098 + 4a6: 90 91 99 00 lds r25, 0x0099 ; 0x800099 + 4aa: a0 91 9a 00 lds r26, 0x009A ; 0x80009a + 4ae: b0 91 9b 00 lds r27, 0x009B ; 0x80009b + 4b2: 30 91 97 00 lds r19, 0x0097 ; 0x800097 + 4b6: 23 e0 ldi r18, 0x03 ; 3 + 4b8: 23 0f add r18, r19 + 4ba: 2d 37 cpi r18, 0x7D ; 125 + 4bc: 68 f1 brcs .+90 ; 0x518 <__vector_6+0x8c> + 4be: 26 e8 ldi r18, 0x86 ; 134 + 4c0: 23 0f add r18, r19 + 4c2: 02 96 adiw r24, 0x02 ; 2 + 4c4: a1 1d adc r26, r1 + 4c6: b1 1d adc r27, r1 + 4c8: 20 93 97 00 sts 0x0097, r18 ; 0x800097 + 4cc: 80 93 98 00 sts 0x0098, r24 ; 0x800098 + 4d0: 90 93 99 00 sts 0x0099, r25 ; 0x800099 + 4d4: a0 93 9a 00 sts 0x009A, r26 ; 0x80009a + 4d8: b0 93 9b 00 sts 0x009B, r27 ; 0x80009b + 4dc: 80 91 9c 00 lds r24, 0x009C ; 0x80009c + 4e0: 90 91 9d 00 lds r25, 0x009D ; 0x80009d + 4e4: a0 91 9e 00 lds r26, 0x009E ; 0x80009e + 4e8: b0 91 9f 00 lds r27, 0x009F ; 0x80009f + 4ec: 01 96 adiw r24, 0x01 ; 1 + 4ee: a1 1d adc r26, r1 + 4f0: b1 1d adc r27, r1 + 4f2: 80 93 9c 00 sts 0x009C, r24 ; 0x80009c + 4f6: 90 93 9d 00 sts 0x009D, r25 ; 0x80009d + 4fa: a0 93 9e 00 sts 0x009E, r26 ; 0x80009e + 4fe: b0 93 9f 00 sts 0x009F, r27 ; 0x80009f + 502: bf 91 pop r27 + 504: af 91 pop r26 + 506: 9f 91 pop r25 + 508: 8f 91 pop r24 + 50a: 3f 91 pop r19 + 50c: 2f 91 pop r18 + 50e: 0f 90 pop r0 + 510: 0f be out 0x3f, r0 ; 63 + 512: 0f 90 pop r0 + 514: 1f 90 pop r1 + 516: 18 95 reti + 518: 01 96 adiw r24, 0x01 ; 1 + 51a: a1 1d adc r26, r1 + 51c: b1 1d adc r27, r1 + 51e: d4 cf rjmp .-88 ; 0x4c8 <__vector_6+0x3c> + +00000520 : +millis(): + 520: 2f b7 in r18, 0x3f ; 63 + 522: f8 94 cli + 524: 60 91 98 00 lds r22, 0x0098 ; 0x800098 + 528: 70 91 99 00 lds r23, 0x0099 ; 0x800099 + 52c: 80 91 9a 00 lds r24, 0x009A ; 0x80009a + 530: 90 91 9b 00 lds r25, 0x009B ; 0x80009b + 534: 2f bf out 0x3f, r18 ; 63 + 536: 08 95 ret + +00000538 : +delayMicroseconds(): + 538: 82 30 cpi r24, 0x02 ; 2 + 53a: 91 05 cpc r25, r1 + 53c: 38 f0 brcs .+14 ; 0x54c + 53e: 88 0f add r24, r24 + 540: 99 1f adc r25, r25 + 542: 88 0f add r24, r24 + 544: 99 1f adc r25, r25 + 546: 05 97 sbiw r24, 0x05 ; 5 + 548: 01 97 sbiw r24, 0x01 ; 1 + 54a: f1 f7 brne .-4 ; 0x548 + 54c: 08 95 ret + +0000054e : +init(): +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring.c:699 + } else { + OSCCAL += 5; + } + } + #endif + sei(); + 54e: 78 94 sei +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring.c:855 + #endif + + // Millis timer is always processor clock divided by MillisTimer_Prescale_Value (64) + #if (TIMER_TO_USE_FOR_MILLIS == 0) + #ifdef TCCR0B + TCCR0B = (TCCR0B & ~((1< +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring.c:893 + + // Initialize the ADC + #if defined( INITIALIZE_ANALOG_TO_DIGITAL_CONVERTER ) && INITIALIZE_ANALOG_TO_DIGITAL_CONVERTER + #if defined(ADCSRA) + // set a2d prescale factor + ADCSRA = (ADCSRA & ~((1<: +analogWrite(): +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:95 +// Right now, PWM output only works on the pins with +// hardware support. These are defined in the appropriate +// pins_*.c file. For the rest of the pins, we default +// to digital output. +void analogWrite(uint8_t pin, int val) +{ + 56c: 1f 93 push r17 + 56e: cf 93 push r28 + 570: df 93 push r29 + 572: 18 2f mov r17, r24 + 574: eb 01 movw r28, r22 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:101 + // We need to make sure the PWM output is enabled for those pins + // that support it, as we turn it off when digitally reading or + // writing with them. Also, make sure the pin is in output mode + // for consistenty with Wiring, which doesn't require a pinMode + // call for the analog output pins. + pinMode(pin, OUTPUT); + 576: 61 e0 ldi r22, 0x01 ; 1 + 578: 4f d0 rcall .+158 ; 0x618 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:103 + + if (val <= 0) + 57a: 1c 16 cp r1, r28 + 57c: 1d 06 cpc r1, r29 + 57e: 34 f0 brlt .+12 ; 0x58c +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:105 + { + digitalWrite(pin, LOW); + 580: 60 e0 ldi r22, 0x00 ; 0 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:109 + } + else if (val >= 255) + { + digitalWrite(pin, HIGH); + 582: 81 2f mov r24, r17 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:216 + digitalWrite(pin, HIGH); + } + } + + } +} + 584: df 91 pop r29 + 586: cf 91 pop r28 + 588: 1f 91 pop r17 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:109 + { + digitalWrite(pin, LOW); + } + else if (val >= 255) + { + digitalWrite(pin, HIGH); + 58a: 9a c0 rjmp .+308 ; 0x6c0 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:107 + + if (val <= 0) + { + digitalWrite(pin, LOW); + } + else if (val >= 255) + 58c: cf 3f cpi r28, 0xFF ; 255 + 58e: d1 05 cpc r29, r1 + 590: 14 f0 brlt .+4 ; 0x596 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:109 + { + digitalWrite(pin, HIGH); + 592: 61 e0 ldi r22, 0x01 ; 1 + 594: f6 cf rjmp .-20 ; 0x582 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:113 + } + else + { + uint8_t timer = digitalPinToTimer(pin); + 596: e1 2f mov r30, r17 + 598: f0 e0 ldi r31, 0x00 ; 0 + 59a: ea 5d subi r30, 0xDA ; 218 + 59c: ff 4f sbci r31, 0xFF ; 255 + 59e: e4 91 lpm r30, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:150 + OCR1A = val; // set pwm duty + } else + #endif + + #if defined(TCCR1E) //Tiny861 + if( timer == TIMER1A){ + 5a0: e3 30 cpi r30, 0x03 ; 3 + 5a2: 59 f4 brne .+22 ; 0x5ba +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:152 + // connect pwm to pin on timer 1, channel A + cbi(TCCR1C,COM1A1S); + 5a4: 87 b5 in r24, 0x27 ; 39 + 5a6: 8f 77 andi r24, 0x7F ; 127 + 5a8: 87 bd out 0x27, r24 ; 39 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:153 + sbi(TCCR1C,COM1A0S); + 5aa: 87 b5 in r24, 0x27 ; 39 + 5ac: 80 64 ori r24, 0x40 ; 64 + 5ae: 87 bd out 0x27, r24 ; 39 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:155 + //sbi(TCCR1A,PWM1A); + OCR1A = val; // set pwm duty + 5b0: cd bd out 0x2d, r28 ; 45 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:216 + digitalWrite(pin, HIGH); + } + } + + } +} + 5b2: df 91 pop r29 + 5b4: cf 91 pop r28 + 5b6: 1f 91 pop r17 + 5b8: 08 95 ret +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:156 + // connect pwm to pin on timer 1, channel A + cbi(TCCR1C,COM1A1S); + sbi(TCCR1C,COM1A0S); + //sbi(TCCR1A,PWM1A); + OCR1A = val; // set pwm duty + } else if (timer == TIMER1B){ + 5ba: e4 30 cpi r30, 0x04 ; 4 + 5bc: 41 f4 brne .+16 ; 0x5ce +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:158 + // connect pwm to pin on timer 1, channel A + cbi(TCCR1C,COM1B1S); + 5be: 87 b5 in r24, 0x27 ; 39 + 5c0: 8f 7d andi r24, 0xDF ; 223 + 5c2: 87 bd out 0x27, r24 ; 39 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:159 + sbi(TCCR1C,COM1B0S); + 5c4: 87 b5 in r24, 0x27 ; 39 + 5c6: 80 61 ori r24, 0x10 ; 16 + 5c8: 87 bd out 0x27, r24 ; 39 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:161 + //sbi(TCCR1A,PWM1B); + OCR1B = val; // set pwm duty + 5ca: cc bd out 0x2c, r28 ; 44 + 5cc: f2 cf rjmp .-28 ; 0x5b2 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:162 + } else if (timer == TIMER1D){ + 5ce: e5 30 cpi r30, 0x05 ; 5 + 5d0: 41 f4 brne .+16 ; 0x5e2 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:164 + // connect pwm to pin on timer 1, channel A + cbi(TCCR1C,COM1D1); + 5d2: 87 b5 in r24, 0x27 ; 39 + 5d4: 87 7f andi r24, 0xF7 ; 247 + 5d6: 87 bd out 0x27, r24 ; 39 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:165 + sbi(TCCR1C,COM1D0); + 5d8: 87 b5 in r24, 0x27 ; 39 + 5da: 84 60 ori r24, 0x04 ; 4 + 5dc: 87 bd out 0x27, r24 ; 39 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:167 + //sbi(TCCR1A,PWM1D); + OCR1D = val; // set pwm duty + 5de: ca bd out 0x2a, r28 ; 42 + 5e0: e8 cf rjmp .-48 ; 0x5b2 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_analog.c:205 + OCR1B = val; // set pwm duty + } else + #endif + + { + if (val < 128) + 5e2: c0 38 cpi r28, 0x80 ; 128 + 5e4: d1 05 cpc r29, r1 + 5e6: ac f6 brge .-86 ; 0x592 + 5e8: cb cf rjmp .-106 ; 0x580 + +000005ea : +turnOffPWM(): +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:81 + //cbi(TCCR0A, COM0B0); + } else + #endif + + #if defined(TCCR1A) && defined(COM1A1) + if( timer == TIMER1A){ + 5ea: 83 30 cpi r24, 0x03 ; 3 + 5ec: 21 f4 brne .+8 ; 0x5f6 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:82 + cbi(TCCR1A, COM1A1); + 5ee: 80 b7 in r24, 0x30 ; 48 + 5f0: 8f 77 andi r24, 0x7F ; 127 + 5f2: 80 bf out 0x30, r24 ; 48 + 5f4: 08 95 ret +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:92 + if( timer == TIMER1A){ + // disconnect pwm to pin on timer 1, channel A + cbi(TCCR1C,COM1A1S); + cbi(TCCR1C,COM1A0S); + //cbi(TCCR1A,PWM1A); + } else if (timer == TIMER1B){ + 5f6: 84 30 cpi r24, 0x04 ; 4 + 5f8: 39 f4 brne .+14 ; 0x608 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:94 + // disconnect pwm to pin on timer 1, channel B + cbi(TCCR1C,COM1B1S); + 5fa: 87 b5 in r24, 0x27 ; 39 + 5fc: 8f 7d andi r24, 0xDF ; 223 + 5fe: 87 bd out 0x27, r24 ; 39 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:95 + cbi(TCCR1C,COM1B0S); + 600: 87 b5 in r24, 0x27 ; 39 + 602: 8f 7e andi r24, 0xEF ; 239 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:100 + //cbi(TCCR1A,PWM1B); + } else if (timer == TIMER1D){ + // disconnect pwm to pin on timer 1, channel D + cbi(TCCR1C,COM1D1); + cbi(TCCR1C,COM1D0); + 604: 87 bd out 0x27, r24 ; 39 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:134 + #endif + + { + } + +} + 606: 08 95 ret +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:97 + } else if (timer == TIMER1B){ + // disconnect pwm to pin on timer 1, channel B + cbi(TCCR1C,COM1B1S); + cbi(TCCR1C,COM1B0S); + //cbi(TCCR1A,PWM1B); + } else if (timer == TIMER1D){ + 608: 85 30 cpi r24, 0x05 ; 5 + 60a: e9 f7 brne .-6 ; 0x606 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:99 + // disconnect pwm to pin on timer 1, channel D + cbi(TCCR1C,COM1D1); + 60c: 87 b5 in r24, 0x27 ; 39 + 60e: 87 7f andi r24, 0xF7 ; 247 + 610: 87 bd out 0x27, r24 ; 39 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:100 + cbi(TCCR1C,COM1D0); + 612: 87 b5 in r24, 0x27 ; 39 + 614: 8b 7f andi r24, 0xFB ; 251 + 616: f6 cf rjmp .-20 ; 0x604 + +00000618 : +pinMode(): +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:33 +#define ARDUINO_MAIN +#include "wiring_private.h" +#include "pins_arduino.h" + +void pinMode(uint8_t pin, uint8_t mode) +{ + 618: cf 93 push r28 + 61a: df 93 push r29 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:34 + if (pin&128) {pin=analogInputToDigitalPin((pin&127));} + 61c: 87 ff sbrs r24, 7 + 61e: 0c c0 rjmp .+24 ; 0x638 + 620: 8f 77 andi r24, 0x7F ; 127 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:34 (discriminator 1) + 622: 83 30 cpi r24, 0x03 ; 3 + 624: 48 f0 brcs .+18 ; 0x638 + 626: 28 2f mov r18, r24 + 628: 30 e0 ldi r19, 0x00 ; 0 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:34 (discriminator 3) + 62a: a9 01 movw r20, r18 + 62c: 43 50 subi r20, 0x03 ; 3 + 62e: 51 09 sbc r21, r1 + 630: 44 30 cpi r20, 0x04 ; 4 + 632: 51 05 cpc r21, r1 + 634: 40 f5 brcc .+80 ; 0x686 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:34 (discriminator 5) + 636: 89 5f subi r24, 0xF9 ; 249 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:35 + uint8_t bit = digitalPinToBitMask(pin); + 638: 90 e0 ldi r25, 0x00 ; 0 + 63a: fc 01 movw r30, r24 + 63c: ea 5c subi r30, 0xCA ; 202 + 63e: ff 4f sbci r31, 0xFF ; 255 + 640: 24 91 lpm r18, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:36 + uint8_t port = digitalPinToPort(pin); + 642: 8a 5b subi r24, 0xBA ; 186 + 644: 9f 4f sbci r25, 0xFF ; 255 + 646: fc 01 movw r30, r24 + 648: 84 91 lpm r24, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:39 + volatile uint8_t *reg, *out; + + if (port == NOT_A_PIN) return; + 64a: 88 23 and r24, r24 + 64c: c9 f0 breq .+50 ; 0x680 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:41 + + reg = portModeRegister(port); + 64e: 90 e0 ldi r25, 0x00 ; 0 + 650: 88 0f add r24, r24 + 652: 99 1f adc r25, r25 + 654: fc 01 movw r30, r24 + 656: ee 59 subi r30, 0x9E ; 158 + 658: ff 4f sbci r31, 0xFF ; 255 + 65a: a5 91 lpm r26, Z+ + 65c: b4 91 lpm r27, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:42 + out = portOutputRegister(port); + 65e: fc 01 movw r30, r24 + 660: e4 5a subi r30, 0xA4 ; 164 + 662: ff 4f sbci r31, 0xFF ; 255 + 664: c5 91 lpm r28, Z+ + 666: d4 91 lpm r29, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:44 + + if (mode == INPUT) { + 668: 61 11 cpse r22, r1 + 66a: 17 c0 rjmp .+46 ; 0x69a +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:45 + uint8_t oldSREG = SREG; + 66c: 9f b7 in r25, 0x3f ; 63 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:46 + cli(); + 66e: f8 94 cli +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:47 + *reg &= ~bit; + 670: 8c 91 ld r24, X + 672: 20 95 com r18 + 674: 82 23 and r24, r18 + 676: 8c 93 st X, r24 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:48 + *out &= ~bit; + 678: 88 81 ld r24, Y + 67a: 28 23 and r18, r24 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:54 + SREG = oldSREG; + } else if (mode == INPUT_PULLUP) { + uint8_t oldSREG = SREG; + cli(); + *reg &= ~bit; + *out |= bit; + 67c: 28 83 st Y, r18 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:55 + SREG = oldSREG; + 67e: 9f bf out 0x3f, r25 ; 63 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:62 + uint8_t oldSREG = SREG; + cli(); + *reg |= bit; + SREG = oldSREG; + } +} + 680: df 91 pop r29 + 682: cf 91 pop r28 + 684: 08 95 ret +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:34 (discriminator 6) +#include "wiring_private.h" +#include "pins_arduino.h" + +void pinMode(uint8_t pin, uint8_t mode) +{ + if (pin&128) {pin=analogInputToDigitalPin((pin&127));} + 686: 27 50 subi r18, 0x07 ; 7 + 688: 31 09 sbc r19, r1 + 68a: 9c e0 ldi r25, 0x0C ; 12 + 68c: 98 1b sub r25, r24 + 68e: 89 2f mov r24, r25 + 690: 23 30 cpi r18, 0x03 ; 3 + 692: 31 05 cpc r19, r1 + 694: 88 f2 brcs .-94 ; 0x638 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:34 + 696: 8f ef ldi r24, 0xFF ; 255 + 698: cf cf rjmp .-98 ; 0x638 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:50 + uint8_t oldSREG = SREG; + cli(); + *reg &= ~bit; + *out &= ~bit; + SREG = oldSREG; + } else if (mode == INPUT_PULLUP) { + 69a: 62 30 cpi r22, 0x02 ; 2 + 69c: 51 f4 brne .+20 ; 0x6b2 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:51 + uint8_t oldSREG = SREG; + 69e: 9f b7 in r25, 0x3f ; 63 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:52 + cli(); + 6a0: f8 94 cli +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:53 + *reg &= ~bit; + 6a2: 3c 91 ld r19, X + 6a4: 82 2f mov r24, r18 + 6a6: 80 95 com r24 + 6a8: 83 23 and r24, r19 + 6aa: 8c 93 st X, r24 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:54 + *out |= bit; + 6ac: e8 81 ld r30, Y + 6ae: 2e 2b or r18, r30 + 6b0: e5 cf rjmp .-54 ; 0x67c +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:57 + SREG = oldSREG; + } else { + uint8_t oldSREG = SREG; + 6b2: 8f b7 in r24, 0x3f ; 63 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:58 + cli(); + 6b4: f8 94 cli +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:59 + *reg |= bit; + 6b6: ec 91 ld r30, X + 6b8: 2e 2b or r18, r30 + 6ba: 2c 93 st X, r18 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:60 + SREG = oldSREG; + 6bc: 8f bf out 0x3f, r24 ; 63 + 6be: e0 cf rjmp .-64 ; 0x680 + +000006c0 : +digitalWrite(): +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:137 + } + +} + +void digitalWrite(uint8_t pin, uint8_t val) +{ + 6c0: 1f 93 push r17 + 6c2: cf 93 push r28 + 6c4: df 93 push r29 + 6c6: 16 2f mov r17, r22 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:138 + if (pin&128) {pin=analogInputToDigitalPin((pin&127));} + 6c8: 87 ff sbrs r24, 7 + 6ca: 0c c0 rjmp .+24 ; 0x6e4 + 6cc: 8f 77 andi r24, 0x7F ; 127 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:138 (discriminator 1) + 6ce: 83 30 cpi r24, 0x03 ; 3 + 6d0: 48 f0 brcs .+18 ; 0x6e4 + 6d2: 28 2f mov r18, r24 + 6d4: 30 e0 ldi r19, 0x00 ; 0 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:138 (discriminator 3) + 6d6: a9 01 movw r20, r18 + 6d8: 43 50 subi r20, 0x03 ; 3 + 6da: 51 09 sbc r21, r1 + 6dc: 44 30 cpi r20, 0x04 ; 4 + 6de: 51 05 cpc r21, r1 + 6e0: 40 f5 brcc .+80 ; 0x732 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:138 (discriminator 5) + 6e2: 89 5f subi r24, 0xF9 ; 249 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:139 + uint8_t timer = digitalPinToTimer(pin); + 6e4: 28 2f mov r18, r24 + 6e6: 30 e0 ldi r19, 0x00 ; 0 + 6e8: f9 01 movw r30, r18 + 6ea: ea 5d subi r30, 0xDA ; 218 + 6ec: ff 4f sbci r31, 0xFF ; 255 + 6ee: 84 91 lpm r24, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:140 + uint8_t bit = digitalPinToBitMask(pin); + 6f0: f9 01 movw r30, r18 + 6f2: ea 5c subi r30, 0xCA ; 202 + 6f4: ff 4f sbci r31, 0xFF ; 255 + 6f6: d4 91 lpm r29, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:141 + uint8_t port = digitalPinToPort(pin); + 6f8: f9 01 movw r30, r18 + 6fa: ea 5b subi r30, 0xBA ; 186 + 6fc: ff 4f sbci r31, 0xFF ; 255 + 6fe: c4 91 lpm r28, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:144 + volatile uint8_t *out; + + if (port == NOT_A_PIN) return; + 700: cc 23 and r28, r28 + 702: 99 f0 breq .+38 ; 0x72a +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:148 + + // If the pin that support PWM output, we need to turn it off + // before doing a digital write. + if (timer != NOT_ON_TIMER) turnOffPWM(timer); + 704: 81 11 cpse r24, r1 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:148 (discriminator 1) + 706: 71 df rcall .-286 ; 0x5ea +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:150 + + out = portOutputRegister(port); + 708: ec 2f mov r30, r28 + 70a: f0 e0 ldi r31, 0x00 ; 0 + 70c: ee 0f add r30, r30 + 70e: ff 1f adc r31, r31 + 710: e4 5a subi r30, 0xA4 ; 164 + 712: ff 4f sbci r31, 0xFF ; 255 + 714: a5 91 lpm r26, Z+ + 716: b4 91 lpm r27, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:153 + + if (val == LOW) { + uint8_t oldSREG = SREG; + 718: 8f b7 in r24, 0x3f ; 63 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:152 + // before doing a digital write. + if (timer != NOT_ON_TIMER) turnOffPWM(timer); + + out = portOutputRegister(port); + + if (val == LOW) { + 71a: 11 11 cpse r17, r1 + 71c: 14 c0 rjmp .+40 ; 0x746 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:154 + uint8_t oldSREG = SREG; + cli(); + 71e: f8 94 cli +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:155 + *out &= ~bit; + 720: ec 91 ld r30, X + 722: d0 95 com r29 + 724: de 23 and r29, r30 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:160 + SREG = oldSREG; + } else { + uint8_t oldSREG = SREG; + cli(); + *out |= bit; + 726: dc 93 st X, r29 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:161 + SREG = oldSREG; + 728: 8f bf out 0x3f, r24 ; 63 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:163 + } +} + 72a: df 91 pop r29 + 72c: cf 91 pop r28 + 72e: 1f 91 pop r17 + 730: 08 95 ret +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:138 (discriminator 6) + +} + +void digitalWrite(uint8_t pin, uint8_t val) +{ + if (pin&128) {pin=analogInputToDigitalPin((pin&127));} + 732: 27 50 subi r18, 0x07 ; 7 + 734: 31 09 sbc r19, r1 + 736: 9c e0 ldi r25, 0x0C ; 12 + 738: 98 1b sub r25, r24 + 73a: 89 2f mov r24, r25 + 73c: 23 30 cpi r18, 0x03 ; 3 + 73e: 31 05 cpc r19, r1 + 740: 88 f2 brcs .-94 ; 0x6e4 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:138 + 742: 8f ef ldi r24, 0xFF ; 255 + 744: cf cf rjmp .-98 ; 0x6e4 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:159 + cli(); + *out &= ~bit; + SREG = oldSREG; + } else { + uint8_t oldSREG = SREG; + cli(); + 746: f8 94 cli +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:160 + *out |= bit; + 748: ec 91 ld r30, X + 74a: de 2b or r29, r30 + 74c: ec cf rjmp .-40 ; 0x726 + +0000074e : +digitalRead(): +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:166 + SREG = oldSREG; + } +} + +int digitalRead(uint8_t pin) +{ + 74e: cf 93 push r28 + 750: df 93 push r29 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:167 + if (pin&128) {pin=analogInputToDigitalPin((pin&127));} + 752: 87 ff sbrs r24, 7 + 754: 0c c0 rjmp .+24 ; 0x76e + 756: 8f 77 andi r24, 0x7F ; 127 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:167 (discriminator 1) + 758: 83 30 cpi r24, 0x03 ; 3 + 75a: 48 f0 brcs .+18 ; 0x76e + 75c: 28 2f mov r18, r24 + 75e: 30 e0 ldi r19, 0x00 ; 0 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:167 (discriminator 3) + 760: a9 01 movw r20, r18 + 762: 43 50 subi r20, 0x03 ; 3 + 764: 51 09 sbc r21, r1 + 766: 44 30 cpi r20, 0x04 ; 4 + 768: 51 05 cpc r21, r1 + 76a: 20 f5 brcc .+72 ; 0x7b4 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:167 (discriminator 5) + 76c: 89 5f subi r24, 0xF9 ; 249 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:168 + uint8_t timer = digitalPinToTimer(pin); + 76e: 28 2f mov r18, r24 + 770: 30 e0 ldi r19, 0x00 ; 0 + 772: f9 01 movw r30, r18 + 774: ea 5d subi r30, 0xDA ; 218 + 776: ff 4f sbci r31, 0xFF ; 255 + 778: 84 91 lpm r24, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:169 + uint8_t bit = digitalPinToBitMask(pin); + 77a: f9 01 movw r30, r18 + 77c: ea 5c subi r30, 0xCA ; 202 + 77e: ff 4f sbci r31, 0xFF ; 255 + 780: d4 91 lpm r29, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:170 + uint8_t port = digitalPinToPort(pin); + 782: f9 01 movw r30, r18 + 784: ea 5b subi r30, 0xBA ; 186 + 786: ff 4f sbci r31, 0xFF ; 255 + 788: c4 91 lpm r28, Z +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:172 + + if (port == NOT_A_PIN) return LOW; + 78a: cc 23 and r28, r28 + 78c: e9 f0 breq .+58 ; 0x7c8 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:176 + + // If the pin that support PWM output, we need to turn it off + // before getting a digital reading. + if (timer != NOT_ON_TIMER) turnOffPWM(timer); + 78e: 81 11 cpse r24, r1 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:176 (discriminator 1) + 790: 2c df rcall .-424 ; 0x5ea +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:178 + + if (*portInputRegister(port) & bit) return HIGH; + 792: ec 2f mov r30, r28 + 794: f0 e0 ldi r31, 0x00 ; 0 + 796: ee 0f add r30, r30 + 798: ff 1f adc r31, r31 + 79a: ea 5a subi r30, 0xAA ; 170 + 79c: ff 4f sbci r31, 0xFF ; 255 + 79e: a5 91 lpm r26, Z+ + 7a0: b4 91 lpm r27, Z + 7a2: ec 91 ld r30, X + 7a4: ed 23 and r30, r29 + 7a6: 81 e0 ldi r24, 0x01 ; 1 + 7a8: 90 e0 ldi r25, 0x00 ; 0 + 7aa: 09 f4 brne .+2 ; 0x7ae + 7ac: 80 e0 ldi r24, 0x00 ; 0 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:180 + return LOW; +} + 7ae: df 91 pop r29 + 7b0: cf 91 pop r28 + 7b2: 08 95 ret +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:167 (discriminator 6) + } +} + +int digitalRead(uint8_t pin) +{ + if (pin&128) {pin=analogInputToDigitalPin((pin&127));} + 7b4: 27 50 subi r18, 0x07 ; 7 + 7b6: 31 09 sbc r19, r1 + 7b8: 9c e0 ldi r25, 0x0C ; 12 + 7ba: 98 1b sub r25, r24 + 7bc: 89 2f mov r24, r25 + 7be: 23 30 cpi r18, 0x03 ; 3 + 7c0: 31 05 cpc r19, r1 + 7c2: a8 f2 brcs .-86 ; 0x76e +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:167 + 7c4: 8f ef ldi r24, 0xFF ; 255 + 7c6: d3 cf rjmp .-90 ; 0x76e +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/wiring_digital.c:172 + uint8_t timer = digitalPinToTimer(pin); + uint8_t bit = digitalPinToBitMask(pin); + uint8_t port = digitalPinToPort(pin); + + if (port == NOT_A_PIN) return LOW; + 7c8: 80 e0 ldi r24, 0x00 ; 0 + 7ca: 90 e0 ldi r25, 0x00 ; 0 + 7cc: f0 cf rjmp .-32 ; 0x7ae + +000007ce
: +main(): +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/main.cpp:6 +#include + +int main(void) +{ + #ifdef TUNED_OSCCAL_VALUE + OSCCAL = TUNED_OSCCAL_VALUE; //set the oscillator calibration value based on the pins_arduino.h file. If this is not set, it will be optimised away + 7ce: 81 b7 in r24, 0x31 ; 49 + 7d0: 81 bf out 0x31, r24 ; 49 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/main.cpp:8 + #endif + init(); + 7d2: bd de rcall .-646 ; 0x54e +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/main.cpp:10 + + setup(); + 7d4: 6f dc rcall .-1826 ; 0xb4 +C:\Users\flux\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/main.cpp:13 (discriminator 1) + + for (;;) + loop(); + 7d6: 91 dd rcall .-1246 ; 0x2fa + 7d8: fe cf rjmp .-4 ; 0x7d6 + +000007da <_exit>: +exit(): +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2278 + 7da: f8 94 cli + +000007dc <__stop_program>: +__stop_program(): +/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2280 + 7dc: ff cf rjmp .-2 ; 0x7dc <__stop_program>