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

pavel-pervomaysk

Свой
  • Постов

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

  • Посещение

Весь контент pavel-pervomaysk


  1. Любая подпрограмма из закрытой области BOOT вызывается без проблем, так и наоборот из обрасти BOOT можно выполнить любую операцию (если она не завязана на прерывания и перенастройку периферии). Векторы прерываний надо переключать, после перехода из BOOT -> MAIN и наоборот. Это ведь для нас код как бы скрыт, для проца данные всегда в читабельном виде. Просто встроенный в процессор загрузчик в зависимости от состояния локбитов выдает нам одно либо другое. Немного из моей практики. К примеру есть у Вас протокол, по которому Вы обновляете ПО, это будет UART, CAN, или свой какой-то 1-wire, о котором никто никогда и не догадается. Для обновления прошивки не обязательно дергать ресетами, зажимать кнопки, итд. В MAIN пишем обработчик "секретной" посылки, (он же обязан быть и в секции BOOT)! Перешли в бут и работаем с бутом. Аналогично схожей командой и вышли от туда. Кстати, сам не пользуюсь загрузчиками от ATMEL, пишу свои. Стояла задача работать с областями Flash, EEprom, External i2c. Лень было каждую 24схх в программаторе писать.
  2. Код покажите. Если прерывание постоянно куда-то уводит PC, со стеком может быть непорядок.
  3. CAN на AT90CAN128

    Что значит не заработало? Если сообщение принято, контроллер отправит АСК.
  4. CAN на AT90CAN128

    Прочитайте даташит ВНИМАТЕЛЬНО, и желательно начиная с 19. Controller Area Network - CAN Я дал пример инициализации для работы в нормальном режиме. Нет же, надо принудительно включить LISTEN и все...
  5. CAN на AT90CAN128

    Датчиков с CAN я не встречал. Датчики обрабатывает зачастую МК. Для HIGH SPEED CAN напряжение между CANH CANL 2-2.5V это нормально. Настраиваем прием Mailbox 14 для сообщений с адресом 777H CANGCON=2 ; CANGSTA=0 ; CANGIT=0 ; CANGIE=0b00000000 ; ;------------------------------------------------------------------------------- ; Interrupt Enable & Disable for Mob 14...0 ;Mob 14,13,12,11,10,9,8; - IEMOB14 IEMOB13 IEMOB12 IEMOB11 IEMOB10 IEMOB9 IEMOB8 ldi tmp,0b01000000 ; Mailbox 14 - interrupt mode! sts CANIE1,tmp ; Can Enable Interrupt MOb Register BAUD 250 000 ; CAN 8 bit 250 Kbps 16 MHz ; Sample Point at 75% CANBT1=0x0E CANBT2=4 CANBT3=13H ;------------------------- CANTCON=0 CANTIML=0 CANTIMH=0 CANTTCL=0 CANTTCH=0 CANTEC=0 CANREC=0 CANHPMOB=0 CANSTMOB=0 CANSTML=0 CANSTMH=0 Инициализируем: CANPAGE=E0H; MailBox 14; CANMESSAGE 0-7; E0 - High nibble Mailbox index; E0-CANMSG[0]; E1-CANMSG[1]; E2-CANMSG[2]; E3-CANMSG[3]; E4-CANMSG[4]; E5-CANMSG[5]; E6-CANMSG[6]; E7-CANMSG[7]; Устанавливаем MID: Message ID. Читаем даташит. CANIDT4 CANIDT3 CANIDT2 CANIDT1 = (777H << 21); Устанавливаем маску (фильтр диапазона принимаемых сообщений): Опять читаем даташит. CANIDM4 CANIDM3 CANIDM2 CANIDM1 = (7FFH << 21); Фильтр указанного ID Full filtering: to accept only ID = 0x317 in part A. - ID MSK = 111 1111 1111 b - ID TAG = 011 0001 0111 b Диапазон работы фильтра Partiel filtering: to accept ID from 0x310 up to 0x317 in part A. - ID MSK = 111 1111 1000 b - ID TAG = 011 0001 0xxx b Без фильтра No filtering: to accept all ID’s from 0x000 up to 0x7FF in part A. - ID MSK = 000 0000 0000 b - ID TAG = xxx xxxx xxxx b Затем обрабатываем прерывание Смотрим lds tmp,CANSIT1 проверяем бит 6, если он, достаем сообщение, обрабатываем, отвечаем. Все. Получаем сообщение CANPAGE=E0H; MailBox 14; CAN0=CANMSG[0]; CANPAGE=E1H; MailBox 14; CAN1=CANMSG[1]; и так до 8го байта.
  6. CAN на AT90CAN128

    Приниматься будут все сообщения 11 и 29 бит. Мы можем их фильтровать только. Флаг IDE проверили, далее решили как считать MID. Для начала начинать надо передавать сообщения корректно. Ловить вторым устройством. Может банально неправильно Baud настроен, я с 250к не работал, такое только в BMW и газелях встречается.
  7. Есть очень много нюансов. .dseg - RAM. .cseg - code segment (дынные во FLASH) .eseg EEprom segment (данные EEProm) для примера нам надо застолбить оперативку .dseg .org SRAM_START blah-blah .cseg org 0 это есть RESET вектор. и дальше погнали. .eseg .org 0 .db "Our EEprom area"
  8. CAN на AT90CAN128

    Настроили CAN модуль. 19.11.2 CAN MOb Control and DLC Register - CANCDMOB CONMOB1 CONMOB0 RPLV IDE DLC3 DLC2 DLC1 DLC0 Bits 7;6; 00 - disable; 01 - enable transmission. Отправляем подготовленный маилбокс ;ID11 ldi tmp,0x48 ; High nibble (4-11bit);(5-29bit); low nibble&7(DLC) ;ID29 ldi tmp,0x58 ; High nibble (4-11bit);(5-29bit); low nibble&7(DLC) и ждем пока установится TXOK в регистре CANSTMOB 10 - перезапись при приеме сообщений маилбокса 11 - приняли сообщение, и пока его не обработаем, оно там будет сидеть. Посоветую еще купить CAN анализатор, очень пригодится, если планируешь работать с шиной. Ато читаю что сообщения друг другу посылаются хаотично - уши заворачиваются....
  9. CAN на AT90CAN128

    CAN контроллер у AT90CAN очень таки неплох, если с ним разобраться... 15 маилбоксов. Внимательно почитать надо про CANPAGE. Рулится все через него. Очень хотелось бы чтобы было как в нормальных процессорах типа NEC, своя отдельная область с произвольным доступом, но нет тут такого. Я настравиваю 1 на передачу Следующими настраиваю фильтр для каждого принимающего маилбокса! Прием работает по прерыванию. Сработало прерывание, проверил забрал данные с маилбокса. ;----------------------; can_handler: ; CAN Transfer Complete or Error push tmp ; in tmp,SREG ; push tmp ; out TCNT0,zero ; Clean TCNT0 lds temp,CANPAGE ; Store CANPAGE ;----------------------; lds tmp,CANSIT2 ; MOB1 RX interrupt! sbrc tmp,SIT5 ; skip if SIT5 =0 rcall _crxi ; SIT5?1{MOB5_interrupt} ;----------------------; sts CANPAGE,temp ; Restore CANPAGE pop tmp ; out SREG,tmp ; pop tmp ; reti ; return from interrupt ;----------------------; _crxi: ; CAN RX MOB in interrupt mode! inc mode ; sbi canlp,crxl ; Can RX Led ON; ldi tmp,mob5 ; Select MOB5 sts _rmob,tmp ; sts CANPAGE,tmp ; SET MOB5 sts CANSTMOB,zero ; clear status register rcall read_mobx ; READ MOB5, save in RAM! lds tmp,CANCDMOB ; Load register ori tmp,RXmes ; SET RX flag! sts CANCDMOB,tmp ; save register ;cbi canlp,crxl ; Can RX Led OFF; ret ; return ;----------------------; ;--- Read MOB 8 bytes ; ; save in RAM (_CRXA) ; read_mobx: ; read data from MOB area and save in RAM push tmp ; Save tmp in STACK push loop2 ; Save Loop2 in STACK push yl ; Save YL in STACK push yh ; Save YH in STACK ;----------------------; clr loop2 ; ldi yl,low (_CRXA) ; Load address ldi yh,high(_CRXA) ; can_rx Array space in RAM ldi loop,8 ; data bytes length ;----------------------; rmc: ; Read_mob_cycle <----| lds tmp,_rmob ; | or loop2,tmp ; Mob number (0...5) | sts CANPAGE,loop2 ; 0...7 | lds tmp,CANMSG ; tmp=CANMSG with pointer loop2 | st y+,tmp ; save in SDRAM with pointer Y tmp | inc loop2 ; loop2 = +1 | dec loop ; loop=-1 | brne rmc ; -----------------------------------| ;----------------------; pop yh ; pop yl ; pop loop2 ; pop tmp ; ret ; return ;----------------------; ;----------------------; Что можно сделать на этом проце не напрягаясь: Принимаит 14 различных "отфильтрованных" ID в прерывании, обрабатывать их, отвечать на них. Больше 16 ID стречается только в приборных панелях автомобилей 32-64.
  10. Ардуино предназначен для новичков в первую очередь. Из плюсов бута - не слетят фузы, не мешает SPI, проще схемотехника CH341 прилепили и все. Сам пользуюсь бутом для своей поделки одной, проще шить по k-line, чем каждый раз SPI вешать.
  11. Если проекты не копеешные - ICE3 без корпуса вполне гуманная вещь. В 4й студии не работает :(. Свистки с алиекспресса не бери, полный шииит.
  12. Присылай свои 27С512 и прошивку, запишу. У меня есть штук 19 W27C512, занимался "цыганским тюннингом" автомобилей, могу записать и выслать. Ато я вижу тут вилами махаться начнете, но в итоге прогер не купится. А если и купится, начнется очень много вопросов как потом стереть одноразовую память
  13. Жесть!, 10 лет и работать только в паралельном режиме. Скорее всего там только сборкой занимаются. Не представляю себе такую отладку на Mega в QFP32-100 с плотным обвесом. Программатор через COM + стабилитроны (конипрог) на удачу. У меня STK500 USB By Petka иногда чудеса творит на длинном шлейфе В плане протекта мое мнение. Кто-то может сказать, что в паралельном режиме они ставят максимум защиты, RSTDSBL; SPIEN; но хочу Вас успокоить, все это бесполезно и никак на защиту не влияет. В итоге + 1 нога RST (очень хорошо только для ATtiny13) и куча головняка для ATmega.
  14. Прочитаешь ты его, а дальше что? Если вопрос возник на этом этапе так сугубо, то пересчитать прибор будет еще сложнее.
  15. Бодался как-то с M306N4F; M306N5F; M306NBF; Из моей практики: Если хочется добиться нормального устойчивого конекта по UART, поставьте соответствующий кварц, к примеру 7,3728 МГц. В противном случае коннект будет только на 9600 и очень нестабилен. M16C/6N серия гораздо лучше работает в режиме SPI. Примеры подключения и описание протокола есть в даташите. Для прояснения ситуации надо посмотреть статусы блоков памяти, стоит на них защита или нет. Если стоит защита от стирания, покупать надо новый чистый процессор и записывать его. Лоченные сектора процессоров возможно можно стереть в паралельном режиме. Если будет желание, могу подсобить с тестами.
  16. Лучше потратить время к примеру на DS28E02...
  17. Подскажите кто работает с Renesas, где можно достать документацию на RH850 серию. Конкретно R7F701 семейство.
  18. Нюанс в другом, можно познакомиться, расширить круг знакомств, найти "себе подобных".
  19. Смотря какая изоляция нужна, речь шла о гальванике с трех сторон. И зачем именно мега 128?, 162 поменьше будет, и не она одна имеет 2 USART + TWI на борту. Если дело не в цене, то конечно влезет, правда разъемы надо очень качественные.
  20. Это все должно быть в корпусе под одно DIN место? Человек который все это сделает конечно найдется, но врят ли будет уже готовый проект с нужной задачей.
  21. Попробуйте прочитать даташит, там изложено довольно хорошо. От себя рекомендую читать блок, исправлять, стирать, записывать.
  22. CAN на AT90CAN128

    Была задача сделать мост UART 500k <-> CAN 125 kBps. Долго извращался я с такой-же проблемой, но нужно внимательно "курнуть" даташит на английском. Русская версия мне была понятной но сути в ней не описано. В итоге сделал так: Настраиваем фильтр на каждый приемный MAILBOX, выбираем RX/TX Mailboxes, полная инициализация CAN модуля. Прием только по прерыванию, приняли CAN сообщение, обработали и в UART его. Аналогичто все обратно. Инициализация модуля. Это пример для M16M1, отличие только в количестве Mailbox 0...5, у CAN32/64/128 их 15 штук. ;----------------------; can_init: ; Initialization CAN module ;---- CANGCON ---------; ; ABRQ OVRQ TTC SYNTTC LISTEN TEST ENA/STB SWRES ldi tmp,0b00000010 ; 02 - enabled! sts CANGCON,tmp ; Can General Control Register ;---- CANGIT-----------; ; CANIT BOFFIT OVRTIM BXOK SERG CERG FERG AERG ldi tmp,0b00000000 ; andi tmp,0x7F ; 7-th bit read only! sts CANGIT,tmp ; Can General Interrupt Register ;---- CANGIE ----------; ; ENIT ENBOFF ENRX ENTX ENERR ENBX ENERG ENOVRT ldi tmp,0b10100000 ; TX & RX interrupt! было 1011 0000 sts CANGIE,tmp ; Can General Interrupt Enable Register ;------------------------------------------------------------------------------- ; Interrupt Enable & Disable for Mob 5...0 ;Mob 5,4,3,2,1,0 ; IEMOB5 IEMOB4 IEMOB3 IEMOB2 IEMOB1 IEMOB0 ldi tmp,0b100000 ; Mob5,0 in interrupt mode! andi tmp,0x3F ; sts CANIE2,tmp ; Can Enable Interrupt MOb Register sts CANIE1,zero ; Can Enable Interrupt MOb Register ;-------------------------------------------------------------------------------- ; Read only! ; - OVRG - TXBSY RXBSY ENFG BOFF ERRP ;ldi tmp,0b00000000 ; ;andi tmp,0x5F ; bits 7,5 not used! ;sts CANGSTA,tmp ; Can General Status Register ; Enable or Disable Mob 5...0 ; ; Read only! 0 - Disabled; 1 - Enabled; ; bit provides the availability of the MOb. ;Mob 5,4,3,2,1,0 ; ENMOB5 ENMOB4 ENMOB3 ENMOB2 ENMOB1 ENMOB0; CANEN2 ;lds tmp,CANEN2 ; Can Enable MOb Register ; CAN Status Interrupt MOb Registers ; read only! ; - - SIT5 SIT4 SIT3 SIT2 SIT1 SIT0 ;lds tmp,CANSIT2 ; rcall baud_500k ; CAN speed baudrate 500k! ;----------------------; ; CAN Timer Clock Period: 0,500 us ; TPRSC7 TPRSC6 TPRSC5 TPRSC4 TPRSC3 TPRSC2 TRPSC1 TPRSC0 ; 16 mhz timer timer ovf interrypt! ; (255 = (255*32.7ms)) = 8338ms ldi tmp,30 ; 30 make ~ 1s timer interrupt sts CANTCON,tmp ; Can Timer Control Register ;----------------------; ; CANTIM7 CANTIM6 CANTIM5 CANTIM4 CANTIM3 CANTIM2 CANTIM1 CANTIM0 ldi tmp,0b00000000 ; sts CANTIML,tmp ; Can Bit Timer RegisterL ; CANTIM15 CANTIM14 CANTIM13 CANTIM12 CANTIM11 CANTIM10 CANTIM9 CANTIM8 ldi tmp,0b00000000 ; sts CANTIMH,tmp ; Can Bit Timer RegisterH ;----------------------; ; TIMTTC7 TIMTTC6 TIMTTC5 TIMTTC4 TIMTTC3 TIMTTC2 TIMTTC1 TIMTTC0 ldi tmp,0b00000000 ; sts CANTTCL,tmp ; Can TCC Timer RegisterL ; TIMTTC15 TIMTTC14 TIMTTC13 TIMTTC12 TIMTTC11 TIMTTC10 TIMTTC9 TIMTTC8 ldi tmp,0b00000000 ; sts CANTTCH,tmp ; Can TCC Timer RegisterH ;----------------------; ; TEC7 TEC6 TEC5 TEC4 TEC3 TEC2 TEC1 TEC0 ldi tmp,0b00000000 ; sts CANTEC,tmp ; Can Transmit Error Counter Register ; REC7 REC6 REC5 REC4 REC3 REC2 REC1 REC0 ldi tmp,0b00000000 ; sts CANREC,tmp ; Can Receive Error Counter Register ;----------------------; ; HPMOB3 HPMOB2 HPMOB1 HPMOB0 CGP3 CGP2 CGP1 CGP0 ldi tmp,0b01010000 ; MOB5 - RX sts CANHPMOB,tmp ; Can Highest Priority MOb Register ;----------------------; ; статус временной ометки CAN 0 ... 65535 ; TIMSTM7 TIMSTM6 TIMSTM5 TIMSTM4 TIMSTM3 TIMSTM2 TIMSTM1 TIMSTM0 ldi tmp,0x00 ; sts CANSTML,tmp ; Can Time Stamp RegisterL ; TIMSTM15 TIMSTM14 TIMSTM13 TIMSTM12 TIMSTM11 TIMSTM10 TIMSTM9 TIMSTM8 ldi tmp,0x00 ; sts CANSTMH,tmp ; Can Time Stamp RegisterH ;----------------------; rcall clear_all_mobs ; Clear all mobs buffer! clr flags ; ret ; Настройка скоростей, я использую 16МГц кварц. ;----------------------; ; CAN Bit Timing Registers 1,2,3 ; CAN 8 bit 50.000 Kbps 16 MHz ; Sample Point at 75% baud_50k: ldi tmp,0x26 ; sts CANBT1,tmp ; Can Bit Timming Register ldi tmp,0x0C ; sts CANBT2,tmp ; Can Bit Timming Register ldi tmp,0x37 ; sts CANBT3,tmp ; Can Bit Timming Register ret ;----------------------; ; CAN 8 bit 75.000 Kbps 16 MHz ; Sample Point at 75% baud_75k: ldi tmp,0x1C ; sts CANBT1,tmp ; Can Bit Timming Register ldi tmp,0x0C ; sts CANBT2,tmp ; Can Bit Timming Register ldi tmp,0x37 ; sts CANBT3,tmp ; Can Bit Timming Register ret ;----------------------; ; CAN 8 bit 83.333 Kbps 16 MHz ( 16 0C 37 old ) ; Sample Point at xx.x% baud_83k: ldi tmp,0x16 ; sts CANBT1,tmp ; Can Bit Timming Register ldi tmp,0x0C ; sts CANBT2,tmp ; Can Bit Timming Register ldi tmp,0x37 ; sts CANBT3,tmp ; Can Bit Timming Register ret ;----------------------; ; CAN 8 bit 100 Kbps 16 MHz ; Sample Point at 75% baud_100k: ; ldi tmp,0x12 ; sts CANBT1,tmp ; Can Bit Timming Register ldi tmp,0x0C ; sts CANBT2,tmp ; Can Bit Timming Register ldi tmp,0x37 ; sts CANBT3,tmp ; Can Bit Timming Register ret ;----------------------; ; CAN 8 bit 125 Kbps 16 MHz ; Sample Point at 75% baud_125k: ; ldi tmp,0x0E ; sts CANBT1,tmp ; Can Bit Timming Register ldi tmp,0x0C ; sts CANBT2,tmp ; Can Bit Timming Register ldi tmp,0x37 ; sts CANBT3,tmp ; Can Bit Timming Register ret ; ;----------------------; ; CAN 8 bit 200 Kbps 16 MHz ; Sample Point at 75% baud_200k: ; ldi tmp,0x08 ; sts CANBT1,tmp ; Can Bit Timming Register ldi tmp,0x0C ; sts CANBT2,tmp ; Can Bit Timming Register ldi tmp,0x37 ; sts CANBT3,tmp ; Can Bit Timming Register ret ; ;----------------------; ; CAN 8 bit 250 Kbps 16 MHz ; Sample Point at 75% baud_250k: ; ldi tmp,0x0E ; sts CANBT1,tmp ; Can Bit Timming Register ldi tmp,0x04 ; sts CANBT2,tmp ; Can Bit Timming Register ldi tmp,0x13 ; sts CANBT3,tmp ; Can Bit Timming Register ret ; ;----------------------; ; CAN 8 bit 500 Kbps 16 MHz ; Sample Point at 75% baud_500k: ; ldi tmp,0x02 ; sts CANBT1,tmp ; Can Bit Timming Register ldi tmp,0x0C ; sts CANBT2,tmp ; Can Bit Timming Register ldi tmp,0x37 ; sts CANBT3,tmp ; Can Bit Timming Register ret ; ;----------------------; ; CAN 8 bit 1000 Kbps 16 MHz ; Sample Point at 75% baud_1m: ; ldi tmp,0x02 ; sts CANBT1,tmp ; Can Bit Timming Register ldi tmp,0x04 ; sts CANBT2,tmp ; Can Bit Timming Register ldi tmp,0x13 ; sts CANBT3,tmp ; Can Bit Timming Register ret ; ;----------------------;
  23. HELP! ATmega324

    Для ATtiny13 и других случаев, чтобы не тянуть 9-12 проводов к индикатору, использую 74hc595, они хорошие и крепкие, много раз использовал для динамической индикации, даже в корпусе TSSOP-16, они 2шт красиво ложатся за индикатором.
×
×
  • Создать...