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

Anub

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

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

  • Посещение

Репутация

0 Обычный

Информация о Anub

  • Звание
    Участник
    Участник
  1. С некоторых пор столкнулся с проблемой того что мне стало тесно в возможностях восьмиразрядных контроллеров. Мне не хватает ножек, таймеров, ШИМ сигналов и скорости, одним словом часто я пытаюсь решить сложные задачи не предназначенными для этого устройствами. Подскажите на что смотреть из раздела 32 разряда от Atmel, так что бы переползти на них было менее болезненно. Или может есть среди 8ми разрядных МК монстры вроде ARM?
  2. HEX: 2600 байт Со всеми обвесами 2609 операторов Chip: ATtiny2313 Memory model: Tiny Optimize for: Size (s)printf features: int, width (s)scanf features: int, width Promote char to int: No char is unsigned: Yes 8 bit enums: Yes Enhanced core instructions: On Automatic register allocation: On 2609 line(s) compiled No errors 7 warning(s) Bit variables area: 2h to 2h Bit variables size: 1 byte(s) Data Stack area: 60h to 7Fh Data Stack size: 32 byte(s) Estimated Data Stack usage: 16 byte(s) Global variables area: 80h to CAh Global variables size: 75 byte(s) Hardware Stack area: CBh to DFh Hardware Stack size: 21 byte(s) Heap size: 0 byte(s) EEPROM usage: 0 byte(s) (0,0% of EEPROM) Program size: 466 words (45,5% of FLASH)
  3. Одновременного вызова функции не происходит, как я уже говорил выше, наличие или отсутствие кода в цикле не влияет на ситуацию.
  4. Это функция компилятора CodeVisionAVR, нареканий никогда не вызывала. Она отправляет символ по USART.
  5. USHORT H = 23; USHORT M = 31; USHORT S = 40; USHORT fi, se, th, fo; bit FuncEnabled = 0; char SetCountCommand[7] = {':','1','3','4','6','/'}; bit setTimeFunctionEnabled = 0; interrupt [TIM1_OVF] void timer1_ovf_isr(void) { TCNT1=57723;//57723 if (S!=59){ S++; } else { S=0; M++; } if (M==60){ M=0; H++; } if (H==24){ H=0; } //PAINT(M/10, M%10, S/10, S%10); if (FuncEnabled!=1){ SetCountCommand[1]=M/10+48; SetCountCommand[2]=M%10+48; SetCountCommand[3]=S/10+48; SetCountCommand[4]=S%10+48; puts(SetCountCommand); } else { ; } } void scanCP(void) { USHORT pos = 1; while(1){ if (setTimeFunctionEnabled){ while(1){ //Программа работает идеально до появления этого цикла if (PINB==0b11110111){ //JoyUp //Наличие с содержимое кода на ситуацию никак не влияют if (pos==1){ fi++; SetCountCommand[1]=fi; puts(SetCountCommand); } } }; } if (PINB==0b11111011){ FuncEnabled = 1; setTimeFunctionEnabled = 1; while(PINB==0b11111011){}; } }; }
  6. Конечно в цикле есть код, поместив который сюда у вас возникло бы раз в десять больше вопросов, в нем ничего необычного не происходит, присваивается несколько значений переменным, но корнями он уходит в глубину программы, я не думаю что у кого то здесь возникнет желание разбираться в программе из 1500 операторов. Плюс это не ничего не несет, что он там есть что его нет, результат один и тот же. А причем тут прерывания? Они вообще никакого отношения к этому циклу не имеют. Да он уходит в бесконечный цикл. Стиль от программистов trolltech, опираюсь так сказать на авторитетов...
  7. ATTINY2313 8мГц while(1){ if (setTimeFunctionEnabled){ while(1){ ; }; } if (PINB==0b11111011){ setTimeFunctionEnabled = 1; while(PINB==0b11111011){}; } }; Вот такая конструкция приводит к тому что USART начинает работать хз как. При отправке одного или двух символов все приходит нормально, при отправке трех приходит битая строка в которой частично или все другие символы, при попытке отправить четыре и более символов не приходит вообще ничего, либо приходит полный бред. При удалении цикла из строки три все приходит в норму. Я подозреваю что происходит нехватка производительности и контроллер не успевает в такт протоколу отправки. Какие мнения, что это еще может быть?
  8. Сделал адаптер на MAX233. Все вроде включил, а реакции никакой нет, в ком-порте мертвая тишина. Как подключал, начну с макса: T1IN(2) - TXD МК T1OUT(5) - RXD COM V-(12) - V-(17) - Перемычка(По ДШ) С2-(10) - С2-(16) -Перемычка(По ДШ) С2+(11) - С2+(15) - Перемычка(По ДШ) VCC(7) - +5V GND(6) - Земля GND(9) - Земля COM-порт: DTR(4) - DSR(6) -Переычка RTS(7) - CTS(8) - Перемычка GND(5) - Земля RXD(2) - T1OUT :05:
  9. Связка Ведущий - Драйвер

    Я делаю часы с индикацией на ЦСИ. Так как ЦСИ не цифровые пришлось самому сделать под них драйвер с регулированием яркости частоты перерисовки и т д. Ведущий МК отвечает за все остальное в то время как драйвер только отрисовывает цифры. Обмен между МК происходит по средствам пакетной передачи. Но с недавних пор я столкнулся с крайне неприятной проблемой - временами индикаторы тухнут, а это прямо говорит о том что драйверная функция потребила что то несъедобное, так как иначе появились бы нули. Вот как это выглядит http://rutube.ru/tracks/1028588.html?v=c5e...bfe97242aa66f18 Функция получения пакета вроде бы как давно проверена, много раз ее использовал, вот она interrupt [USART_RXC] void usart_rx_isr(void) { char data = UDR; if (!rx_done) { if (data == ':') fbp = 1; if (fbp) { rx_buffer[rx_wr_index++] = data; if (data =='/') { rx_done = 1; fbp = 0; rx_wr_index = 0; activeCommand(rx_buffer); } else if (rx_wr_index>=RX_BUFFER_SIZE) { rx_wr_index = 0; rx_buffer_overflow = 1; } } else; } else rx_data_overrun = 1; } void activeCommand(char c[]) { USHORT a, b, d, e; a=rx_buffer[1]; b=rx_buffer[2]; d=rx_buffer[3]; e=rx_buffer[4]; fi=a-48; //Так как преобразование идет в ASCII код приходится доводить значение se=b-48; th=d-48; fo=e-48; rx_done = 0; } Шлю команду по прерыванию каждую секунду так interrupt [TIM1_OVF] void timer1_ovf_isr(void) { PORTB=0x00; TCNT1=57723;//57723 if (S!=59){ S++; } else { S=0; M++; } if (M==60){ M=0; H++; } if (H==24){ H=0; } SetCountCommand[1]=M/10+48; SetCountCommand[2]=M%10+48; SetCountCommand[3]=S/10+48; SetCountCommand[4]=S%10+48; puts(SetCountCommand); } Как видно из вышеприведенного все это прекрасно работает за исключением только того бага. Что это может быть и как это лечить?
  10. MEGA16 Необходимо вывести ШИМ с ножки OCR1B на пин PORTB. При частоте тактирования ШИМ равной такту системной синхронизации. Как я понимаю если сделать так while(1){ PORTB=PIND; }; ШИМ разобьется, так как выполнение предписанных действий требует времени, а за это время ШИМ уйдет далеко вперед. Бесспорно можно использовать транзисторы, но устройство которое я делаю довольно маленького размера и в нем уже 12 транзисторов, еще 8 транзисторов это уже слишком. Если ли способ транслировать ШИМ с системной частотой тактирования программным путем?
  11. Транзистор должен открываться 70 раз в секунду, оптопара срабатывает от силы раз в секунду, или я не с теми фототранзисторами работал?
  12. Вопрос ламерского типа... Как открыть транзистор пустым источником питания. Транзистор должен пропустить большое напряжение при открытии небольшим. Как открыть малым напряжением с тем учетом что земля источника висит в воздухе?
  13. Первый раз попробовал сделать ПП. При проявлении фоторезиста дорожки четко проявились приблизительно через 30 секунд, а вот фотороезист начал слезать только минуты через три вместе с дорожками, последние отклеивались менее охотно чем остальное. По симптомам похоже на то что было засвечено не то что нужно. Это вполне понятный факт так как я не смог напечатать фотошаблон с предельно черным тонером, вышло как то вот так: В настройках принтера просто не нашел ползунка установки черного тонера, RGB, есть, в черного нет! УФ лапы энергосберегающая 26В, расстояние до платы 11см, фоторезист пленочный негативный. Посоветуйте что делать, а то я уже в серьез начал задумываться о смене принтера...
  14. Если горят все сегменты то свет совсем слабый, один сегмент просто полыхает. Понятное дело почему, ибо ток везде один. Получается что каждая цифра будет иметь свою яркость... Есть ли способ заставить все сегменты светить одинаково без кучи резисторов под каждую цифру?
  15. Напряжение 6.5в снижается стабилитроном до 4.7в, при этом вся схема потребляет 270мА. Мощность равна 1.755Вт, понятное дело что стабилитрон раскаляется до красна... Чем добиться такого же эффекта снижения напряжения но при более выскокой мощности?
×
×
  • Создать...