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

udlcvn

Members
  • Постов

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

  • Посещение

Электроника

  • Стаж в электронике
    Не связан с электроникой

Посетители профиля

1 343 просмотра профиля
  • YSW

  • veltis

Достижения udlcvn

Стажер

Стажер (3/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

1

Репутация

  1. Вот так я объявил и все заработало int user_data[] __attribute__((space(eedata))) = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  2. Для объявления массива в памяти EEPROM посмотрел в хелпе "MPLAB XC16 C Compiler Help" как это делается и взял оттуда кусок кода. Вот этот int _EEDATA(2) user_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; скопировал в текст программы где объявляются глобальные переменные и она перестала компилироваться. Может кто знает как объявить массив в энергонезависимой памяти? Или подскажет что здесь не правильно.
  3. Если программу только компилировать то удачно. Это сообщение появляется после удачной компиляции при запуске симуляции. Может гугл не правильно перевел. О каком инструменте речь? Я недавно в MPLAB работаю.
  4. Мое сообщение вы не внимательно читали. Вот сообщение симулятора И вот гугл перевод сообщения. Из сообщения понятно что "программа не была построена с использованием расширенных инструкций процессора" А где их взять эти расширенные инструкции. Я подумал что они есть в XC16. Этот контроллер PIC18F2520 и этот PIC18F2585 работает в симуляторе а этот PIC18F44J11 и этот PIC18F24J10 не работает. Они все 18-ой серии. Дгадался что с буквой "J" в названии не симулируется? Какой он серии и как его симулировать?
  5. Нужна программа для написания и отладки кода на Си для пик контроллеров.
  6. Вот такое сообщение выкидывает если в настройках стоит например PIC18F44J11 и другие но не все. С этим например PIC18F2520 работает. Устанавливал компиляторы Си ХС8 и ХС16 но в списке только ХС8. Может из-за этого не работает. Как с этим бороться?
  7. Все решилось это не прошивка это мусор в переменных.
  8. Слетает прошивка при включении/выключении питания. ATiny2313A После прошивки работает пока не отключу питание. Пытался отключить и включить при заброшенном контроллере (подключал ресет к земле) все равно слетает.
  9. Точно. Просто я для проверки одну команду разместил в отдельном файле так оно не зашло туда.
  10. Atmel Studio 7.0 как настроить чтобы при отладке заходить в файл. Мне это надо чтоб проект не был в одном файле. Это не удобно приходится крутить колесо долго.
  11. Все верно дело во фузе CLKDIV8 был запрограммирован. Про существование данного фуза я раньше не слышал. Флаг опустошения буфера передачи UDRE0 я не проверяю когда уверен что буфер пуст. В данном случае из за большого интервала между передачами я не проверяю. А если я точно знаю что и буфер и сдвиговый регистр пуст то загружаю два байта подряд. И потери данных не было. Я так отправлял данные с АЦП сразу два байта старший и младший. Так как АЦП работал в непрерывном режиме и время преобразования постоянно то просто рассчитал минимальную скорость передачи чтобы данные не задерживались (отправлялись быстрей чем получались). Так удобней прям из прерывания АЦП и сокращается время обработки прерывания. А если данные будут передаваться медленней необходимого то все равно будет потеря данных, в данном случае даже если проверять бит UDRE0. Бит UDRE0 проверяют чтоб не перезаписать данные которые еще не переместились в сдвиговый регистр.
  12. В место любых данных передает только 0 или 128. Программа просто передает известные значения но получаем в место отправленных только 0 или 128. Код можно пропустить и прочитать до конца сообщение для понимания проблемы. Настраеваю вот так ;========================================================================================================================== ;===================== Константы UART ===================================================================================== .equ ON_UCSR0A = (0<<RXC0 | 0<<TXC0 | 0<<UDRE0 | 0<<FE0 | 0<<DOR0 | 0<<UPE0 | 0<<U2X0 | 0<<MPCM0) .equ ON_UCSR0B = (1<<RXCIE0 | 0<<TXCIE0 | 0<<UDRIE0 | 1<<RXEN0 | 1<<TXEN0 | 0<<UCSZ02 | 0<<RXB80 | 0<<TXB80) .equ ON_UCSR0C = (0<<UMSEL01 | 0<<UMSEL00 | 0<<UPM01 | 0<<UPM00 | 1<<USBS0 | 1<<UCSZ01 | 1<<UCSZ00 | 0<<UCPOL0) ; Настройка скорости .equ ON_UBRR0H = 0 .equ ON_UBRR0L = 25 ;===================== константы UART ===================================================================================== ;========================================================================================================================== макрос выкладую чтобы видно было че за команда "uout" .macro uout .if @0<0x40 out @0,@1 .else sts @0,@1 .endif .endm потом записую так //************************************************************************************* ;===================== Настройка UART ================================================= ldi temp, ON_UCSR0A uout UCSR0A, temp ldi temp, ON_UCSR0B uout UCSR0B, temp ldi temp, ON_UCSR0C uout UCSR0C, temp ; Настройка скорости ldi temp, ON_UBRR0H uout UBRR0H, temp ldi temp, ON_UBRR0L uout UBRR0L, temp ;===================== настройка UART ================================================= //************************************************************************************* специально для проверки организовал такой цикл. main: ldi temp, 255 inc time1 cp time1, temp brne main ldi temp, 255 inc time2 cp time2, temp brne main inc temp2 uout udr0, temp2 rjmp main он отправляет раза два за секунду байты каждый раз больше на единицу но приходит в место данных только 128 и 0 вот копи паст 128 0 128 128 0 128 128 128 128 128 128 128 0 128 128 128 128 128 128 0 128 128 128 128 128 0 128 128 0 128 0 0 128 128 0 128 0 128 128 128 128 128 128 0 128 128 128 128 128 0 128 128 0 128 0 128 128 128 128 128 0 128 128 128 128 а должно быть 1 2 3 4 5 6 и так далее по кругу. До этого организовывал передаю на контроллер который в прерывании приема отправлял байт назад. И было замечено что при отправке байта примерно 190 и больше по светодиоду было видно что контроллер вообще ниче не отправляет да и принятых в компе байт не добавлялось. Предположение что не принимает старт бит а прием байтов с маленьким значением из за большого числа нулей воспринимается как старт бит. скорости вроде правильные. кварц 8МГц скорость порта serialPort1.BaudRate = 19200; Хочю отметить что прием передачю на мега8 я уже организовывал таких проблем небыло.
  13. В нэте есть инфа как добавлять в список новые мк. Я думаю не понадобится так как новая прошивка не дружит с USBASP_AVRDUDE_PROG.
  14. Поставил новую прошивку с оф сайта. Полностью стер и переписал всю память а не только флеш. И ещо нужно было скорость программирования подобрать. В старой была скорость бешеная а щас медленней. На большой и на совсем маленькой не работает. Также щас программатор перестал работать с программой USBASP_AVRDUDE_PROG А она и нафик не нада если она не хочет шить мегу48Р.
×
×
  • Создать...