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

Alex@ndr

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

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

  • Посещение

Репутация

0 Обычный

Информация о Alex@ndr

  • Звание
    Участник
    Участник
  • День рождения 06.12.1984

Контакты

  • Сайт
    Array
  1. AVR и Siemens M55

    Не могли бы Вы выложить исходники программы, или добавить возможность созданя бОльших шрифтов(100х100) и разворот на 90градусов?
  2. AVR и Siemens M55

    Какраз щас играюсь с таким, пока ничего сложного вывод текста и картинок. Ориентацию меняю програмно, очень не хватает описания регистров..... А вам удалось в 8 бит цвет переключить?? LCD.rar
  3. Mega8 + DP1205

    Действительно, дело было в SS, назначил его выходом и всё заработало. Спасибо за помощь!
  4. Mega8 + DP1205

    Не помогло, всё равно виснет. Определил где именно, на ожидании завершения работы SPI. Причем, то в WriteConfig, то в ReadConfig void WriteConfig(char adres, char value) { adres = ((adres << 1) & 0x3F) | 0x01; PORTD |= (1 << 5); PORTD &= ~(1 << 4); SPDR=adres; while(!(SPSR & (1 << SPIF))); SPDR=value; while(!(SPSR & (1 << SPIF))); //ЗАВИСАЕТ ЗДЕСЬ adres = SPDR; PORTD |= (1 << 4); } char ReadConfig(char adres) { char value = 0; PORTD |= (1 << 5); adres = ((adres << 1) & 0x7F) | 0x41; PORTD &= ~(1 << 4); SPDR=adres; while(!(SPSR & (1 << SPIF))); // ЗАВИСАЕТ ЗДЕСЬ value = SPDR; PORTD |= (1 << 4); return value; }
  5. Mega8 + DP1205

    Доброго времени суток, Есть такая проблемка, подключаю трансивер DP1205 к AtMega8 и при обращении по SPI, Mega зависает. Зависание происходит абсолютно непредсказуемо, иногда сразу после включения, иногда после нескольких минут работы. Программу(WinAVR) максимально упростил, читаю и пишу в один из регистров, но всё равно виснет. может SPI неправильно настроен? Помогите разобраться плиз #include <avr/io.h> #include <util/delay.h> void init(void) //инициализация { DDRC |= (1 << 5); //сделать выходом DDRD |= (1 << 4); //сделать выходом DDRD |= (1 << 5); //сделать выходом PORTD |= (1 << 4); //установка в 1 NSS_CONFIG PORTD |= (1 << 5); //установка в 1 NSS_DATA DDRB |= (1 << 3); //MOSI сделать выходом DDRB |= (1 << 5); //SCK сделать выходом SPCR = (1 << SPE)|(1 << MSTR)|(1 << SPR0); } void WriteConfig(char adres, char value) { adres = ((adres << 1) & 0x3F) | 0x01; PORTD |= (1 << 5); //установка в 1 NSS_DATA PORTD &= ~(1 << 4); //активация NSS_CONFIG SPDR=adres; while(!(SPSR & (1 << SPIF))); SPDR=value; while(!(SPSR & (1 << SPIF))); PORTD |= (1 << 4); //деактивация NSS_CONFIG } char ReadConfig(char adres) { char value = 0; PORTD |= (1 << 5); //установка в 1 NSS_DATA adres = ((adres << 1) & 0x7F) | 0x41; PORTD &= ~(1 << 4); //активация NSS_CONFIG SPDR=adres; while(!(SPSR & (1 << SPIF))); value = SPDR; PORTD |= (1 << 4); //деактивация NSS_CONFIG return value; } void main (void) { char Data; init(); while(1) { _delay_ms(100); Data = ReadConfig(4); if (Data > 0) { WriteConfig(4, 0x00); PORTC |= (1 << 5); } else { WriteConfig(4, 0x01); PORTC &= ~(1 << 5); }; }; //конец цикла } //конец P.S. На PORTC 5 подключён светодиод, при зависании перестаёт моргать
  6. Вопрос по USART

    Во, вот этот вариант ещё лутше - позволил повыкидывать printf и сэкономить почти 1кб памяти! А переменная HEXtable обязательно должна быть static const ?
  7. Вопрос по USART

    А бедный USART причем? Ну хоть ЧУТЬ-ЧУТЬ-ЧУТЬ о формате ....printf() ну НАДО ПОЧИТАТЬ!!!!!! printf( "%04X", а ); Спасибо, то что нужно. Тема закрыта.
  8. Вопрос по USART

    Здравствуйте, есть маленький вопрос по USART. Мне нужно передавать по USART некую переменную int a (изменяется от 0 до 20000) в формате hex, причём так, чтобы длинна пакета передачи в любом случае оставалась неизменной. Тоесть при передаче числа a=18654 должна быть посылка 48DE, при а=3578 ->0DFA, при a=12 ->000C, при a=0 -> 0000. Первое что пришло в голову это вывод вот таким образом, дописывая недостающие ноли: if (а/256<16)printf("0"); printf("%X",а/256); if (а%256<16)printf("0"); printf("%X",а%256); Работает, но мне самому это жутко ненравится, наверняка для решения такой задачи есть способы поизящнее. Подскажите пожалуста как мне правильно выводить hex- значения. Компилятор CodeVision.
  9. Спасибо за ответы, но мож кто пример программы подкинет, как эти самые локи считать? И ещё, неохота с загрузчиком связыватся, может можно произвести чтение фьюзов или локов из основной программы?
  10. Так если поставить защиту кодом + защиту по калибровочной константе + проверку контрольной суммы(чтоб прошивку труднее править было) +ещё чё нибудь придумать, это сколько головной боли будет у того кто захочет такую программу ломать. Думаю будет проще написать собственную программу, чем с такою разбиратся. Только надо ещё чтоб реализация всего этого была достаточно простой, ато защита программы получится сложнее самой программы.
  11. Спасибо, щас буду смотреть. См. первое сообщение. Прошивка будет неработоспособна без моего кода, единственный вариант -считать ЕЕРRОМ с уже разблокированного МК(с обеими кодами) и шить его в остальные.
  12. Вон чё в даташите на AtMega16 нарыл: Насколько я ничего не понимаю в английском, это значит что всётаки можно прочитать фьюзы и локи самим контроллером!!!Только как, для меня пока остаётся загадкой...
  13. Генерировать случайные числа буду через АЦП, например так: провёл 1000 замеров, три младших разряда суммы результатов -трёхзначное случайное число. Защёт погрешности АЦП результат будет абсолютно непредсказуемый и случайный. Ну больше подходящих вариантов я невижу, а так хоть какаято защита. И ещё очень легко организуема, вызовет зависание: ... while (OSCCAL!=0x6A) { }; ... Кстати, я надеюсь калибровочную константу МК изменить нельзя?
  14. C константой калибровочного бита CLC разобрался, беру в регистре OSCCAL. Буду попробовать, может и фьюзы защиты найду где брать...
  15. С SIM-карты защита точно не получится.Там два кода, IMSI-ничем незащищён(его даже через мобильный можно посмотреть),KI-защищён, но у тех карт которые не клонируются, его вычислить невозможно. Ладно, я так понял нормальной защиты всё равно неполучится, ну мне хотябы защититу от простого копирования прошивки в другой МК. Вот мне идея понравилась проверять заводскую константу CLC. Может кто-нибудь дать пример кода, как считать эту константу?
×
×
  • Создать...