Перейти к содержанию
    

Barmaley13

Участник
  • Постов

    10
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Barmaley13


  1. Проект на ATMega8.

    Имеем часть кода:

    CW=1;
    START_M;
    step_counter=0;
    while(step_counter<100)
    {
        wdt_reset();
    }
    wdt_reset();
    home();
    sound();

    Эта часть выполняется в основном теле программы. Переменная step_counter инкрементируется в прерывании Таймера1. Тупо нужно подождать, пока её значение не достигнет 100.

    С отключенной оптимизацией (-O0) как-бы все нормально:

    93:               CW=1;
            LDI       R24,0x01       Load immediate
            LDI       R25,0x00       Load immediate
            STS       0x0061,R25     Store direct to data space
            STS       0x0060,R24     Store direct to data space
    94:               START_M;
            LDI       R24,0x4E       Load immediate
            LDI       R25,0x00       Load immediate
            LDI       R18,0x0D       Load immediate
            MOVW      R30,R24        Copy register pair
            STD       Z+0,R18        Store indirect with displacement
    95:               step_counter=0;
            STS       0x006B,R1      Store direct to data space
            STS       0x006A,R1      Store direct to data space
    96:               while(step_counter<1)
            RJMP      PC+0x0002      Relative jump
    98:                   wdt_reset();
            WDR                      Watchdog reset
    96:               while(step_counter<1)
            LDS       R24,0x006A     Load direct from data space
            LDS       R25,0x006B     Load direct from data space
            SBIW      R24,0x00       Subtract immediate from word
            BREQ      PC-0x06        Branch if equal
    100:              wdt_reset();
            WDR                      Watchdog reset
    101:              home();
            RCALL     PC+0x0286      Relative call subroutine
    102:              sound();
            RCALL     PC+0x03B5      Relative call subroutine
    +000000B2:   E080        LDI       R24,0x00       Load immediate
    +000000B3:   E090        LDI       R25,0x00       Load immediate
    +000000B4:   E4A8        LDI       R26,0x48       Load immediate

    А вот при включении опции оптимизации (-O1...Os) наблюдаем следующее:

    93:               CW=1;
            LDI       R24,0x01       Load immediate
            LDI       R25,0x00       Load immediate
            STS       0x0061,R25     Store direct to data space
            STS       0x0060,R24     Store direct to data space
    94:               START_M;
            LDI       R24,0x0D       Load immediate
            STD       Z+0,R24        Store indirect with displacement
    95:               step_counter=0;
            STS       0x0063,R1      Store direct to data space
            STS       0x0062,R1      Store direct to data space
    98:                   wdt_reset();
            WDR                      Watchdog reset
            RJMP      PC-0x0001      Relative jump
    98:                   wdt_reset();
            CLI                      Global Interrupt Disable
            RJMP      PC-0x0000      Relative jump
    +0000018F:   0001        ???                      Data or unknown opcode

    Далее пусто (0xFFFF).

    Контроллер увисает на сбросе пса. А остального кода как-бы и нету!!! И, как видно, переменная step_counter не проверяется.

    Проект не критичен, поэтому стал заморачиваться на С. Можно и без оптимизации. Но все-таки интересно, ГДЕ ЖЕ ОСТАЛЬНОЙ КОД???

    Да, еще вот:

    avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99       -DF_CPU=4000000UL -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT UV.o -MF dep/UV.o.d  -c  ../UV.c

  2. Вот мой первый опыт металлизации.

    Для химического меднения использовал рецепт UA1CFM: Сернокислая медь - 15 г\л, Трилон Б - 25 г\л, Едкий натр - 14 г\л, Формалин технический - 10мл\л. Пропорции уменьшал на 100 мл. воды. Хлористое олово и соляная кислота - пропорции от фонаря. Чистоты особой и не было. Промывка - вода из под крана. Обезжиривал ацетоном. Текстолит советский, двухсторонний. С одной стороны фольгу снял полностью с одним слоем текстолита. Использовал нитрат серебра. Тоже самодельный. В нем было небольшое содержание нитрата меди (раствор слегка был голубоватого цвета). Раствор для меднения был не первой свежести (попробовал 2 образца, оставил его на ночь, а на следующий день поместил туда образец, что на фото). Опыт удался, результатом доволен. После гальваники слой довольно толстый. Держится на текстолите крепко, правда, сильно еще не грел. Гальваника: на 100 мл. воды 25 гр. купороса, 8 гр. серной кислоты 96%. Спирта 1-2 мл. - на глаз. 2 вольта от лабораторного блока питания. Ограничение тока - 200 мА. Вначале все это пыталось кушать много тока, потом потребление падало где-то до 130 мА в среднем. Оставлял на ночь.

    На первом фото диаметр отверстий 1,2 мм., чуть выше - 1 мм. На втором -0,8 мм.

    Извиняюсь за качество фото. Небыло приличной техники под руками.

    post-9428-1288347351_thumb.jpg

    post-9428-1288347385_thumb.jpg

  3. Выкладываю обещанный код на LCD Nokia 6300. Извиняюсь за задержку - был в командировке.

    Код написан на С.

    Будет время - перепишу на ассемблере.

    Ногами не пинайте - делал по-быстрому, из шаблона CVAVR. Сделал, включил - работает. Дальше им заниматься пока некогда.

    Дисплей подключен следующим образом:

    #define WRX   PORTC.0
    #define RDX   PORTC.1
    #define CSX   PORTC.2
    #define DCX   PORTC.3
    #define RESX  PORTC.4

    Контроллер работает на частоте 4 МГц, питание - 3,3 В. Еще на 2-х 1117 собрано 2 питания на дисплей. Подсветка по-колхозному - через резистор.

    LCD_Nokia.rar

  4. To Andy_M.

     

    С софтварным кодированием не заморачивайся. Нужен мощный контроллер. ARM, например, какой-нить.. Лучше использовать аппаратный декодер. У меня есть кое-какие материалы. Сегодня дома посмотрю - завтра поделюсь.

    Удачи!

×
×
  • Создать...