Jump to content

    

Vlad1977

Участник
  • Posts

    59
  • Joined

  • Last visited

Reputation

0 Обычный

About Vlad1977

  • Rank
    Участник
    Участник
  1. ну тут ситуация не совсем стандартная, он затыкался только когда был перехлест импульсов. Без всяких ошибок. Так что думаю, что флаги событий тут не при чем. Вообщем проблема решена, стоит сокроть 500kbps каждую 1мс шлют друг другу, пока ошибок нет, елси так продержутся несоклько дней то все будет хорошо :). Всем большое человеческое спасибо!
  2. А что происходит елси запрещены прерывания на прием от кан и в этот момнет приходит посылка? Я убрал запрет прерываний на прием, и проблема пропала, при том не важно куда я этот запрет ставлю, и сколько он по времени длится. В любом месте кода ставлю: запрет - 1 пустая команда - разрешаю прерывания, и происходит сбой. Как только отключил запрет переваний на прием, всю ночь проработала без сбоев.... Сейчас уменьшил время посылки до 6 мс на каждой строне, отключил ТТС, уже час работает. Импульсы перекрываются, проблем не вижу пока. Логику понять не могу, ну пердположим запрещены прервыания на прием, в этот момент узел проиграл арбитраж, потом же я прервание разрешил, и должен их спокойно обработать и выйти из обработчкиа.
  3. Автомотический контроль сообщений я и включал и выключал, ситуация не меняется. Это я так понимаю Режим TTC, по умолчанию он включен. Отключается установкой бита CANGCON=(1<<TTC). Я прямо вижу на осцил., елси он включен и я разрываю линию, физически отсоединив провод, то сразу нафинают валить сообщения. А как только лини включаю то они передаеются именно с той частотой, с которой я их и посылаю. Те это еще раз подверждает что передача завершается типа успешно, хотя на принимающей стороне, я не попадаю на моб настроееннный на прием после конфликта вообще. Контроллеры полностью одинаковые AT90CAN128. Затыкается именно на прием, вначале один потом втрой, или же могут оба одновременно, почему пока понять не могу....Но чаще первым затыкается тот у которого ID на отправку меньше. А после него проходит пара минут и второй тоже уходит. Елси возникает арбитраж, я в прерывание не попадаю, как мне понять что он произошел и надо что то сделать? Ведь никаких ошибок, все передается, и программа думает что все номально.
  4. Спасибо за ответы. 120ом стоит. Сейчас я сделал еще проще. M каждый 15мс передает посылку S, а S каждые 22мс передает посылку M, они не привязаны к друг другу. Если посылка дошла, то анализирую первые 2-а байта, они разные должны быть, и говорю что все ОК. Ситуация повторяется, все работает до тех пор пока не переххлеснутся импульсы. Потом данные из моей посылки не доходят, хотя передающий контроллер, получает АСК и говорит что передача прошла успешно! А на принимающей стороне, в прерывание от принимающего моб, он вообще перестает попадать. При том не возникает никаких ошибок. Включил все возможные прерывания по ошибкам, в обработик не попадаю вообще. Типа вес хорошо кан работает передачи проходят успешно. Толкьо вот на принимающей стороне, в прерывание от принимающего моб не попадаю, и данных соответственно нет. Я думал на счет арбитража, елси возникает арбитраж, ошибки какие то должны возникнуть? И почему тогда, когда проходит несоклько минут, импульсы на осцилограце опять расходятся, но данные не доходят. Как уже говорил, никаких ошибок, все хорошо, толко в принмающий моб перестает попадает вообще.
  5. Есть 2-а кнтроллера, М и S они общаются между сосбой по кан. М отправляет на S каждые 60мс посылку, S в свою очередь, отвечает на каждую принятую посылку. ID MSK задана жестко, IDT у каждого свой. Все работает минут 20, а потом порисходит сбой. Или только на М, он перестает принимать посылки от S, хотя S от него все получает и отвечает. Или же обмен прекращается вообще. Может кто сталкивался с подобным? контроллер atmel 128 скокрость минимальная 100Kbps на 8 Мгц. При том вижу на осцилографе, M посылает посылку, S отвечает. Время ответа дышит, то 1мс то 10мс, но иногда ответ перекрывается с запросом, и именно в этот момент может упасть обмен вообще. Но адреса то ID разные и маска жестко задана. Если увелить время когда M шлет запрос, то работает дольше, но очень хотется понять прчину :(. Даже в отладке ловил, в BUS OFF M не попадает. CANSIT2 показывает что отправка прошда успешно, и я вижу, что S всё принял и ответил правилльно. А М отказывается от него получать данные. Было такое: на М возведен флаг RXOK на мобе который натсроен на прием, но в CANSIT2 никакого события о приеме нет.
  6. С if тоже хреново, нету же гарантии что передатчик сейчас свободен. А с while вообще не вариант, сейчас посомтрел прибором, елси обрыв в линии то вешается вся программа, достаточно 2-а раза отправить послку. Она просто второй раз не отправится, и будеи висеть в while и ждать.... По хорошему только прервания делать, или таймер еще вводить, типа while (CANGSTA & (1<<TXBSY) | timeOut );
  7. А кто сталкивался, если отправлять данные не через прерывание, а ждать ну типа : while (CANGSTA & (1<<TXBSY)); Это может на долго повесить программу, или же быстро закинется посылка в буффер для отправки, и не важно что там с сетью скоростью и тд? Просто я менял скорость и смотрел по осциллографу сколько держится это флаг, что на быстрой что на медленной передаче примерно 1-2мс, в принципе это терпимо, но вот если эта пауза будет больше, то уже не хорошо.
  8. Очень походе что переджается только адрес, тк его меняю и меняется осуилограмма, а елси меняю данные в посылке ничего не меняется. Отключаю второй узел, который ОК выдает, на желтом лучше пропадает последний импульс. пипец, взял другую железяку и все пошло :(, 3 дня потратил в пустую....
  9. Ну вот разве это похоже на посылку из 8 ми байт? и 11 битный ID желтый луч в линии а синий на ноге TX
  10. блин сейчас вообще ни с какой скоростью данные не доходят :(. гуру ну подскажи плииз где копать? Попадаю на прерывание от моба, те и адрес и маске поравильно заданы, передатчик говорит TXOK, те удачное завершение передачи. А на приемнике в реситре CANCDMOB == 0х80. те младшие биты DLC равны 0. Хотя на передаче я выставляю из хначение 8. Может такое из за сокрости быть ? или ошибка в когде где то :(
  11. народ нихрена понять не могу,стоит внешний кварц на 8мГц, настариваю сокрость как написано в даташите, на 250 кбот, CANBT1= 0x02; CANBT2 = 0x0C; CANBT3=0x37; В итоге посылка проходит, получаю ОК на отправку, ОК на приеме, только данных нету, везде 0 ли прописаны! Ставлю скорость вот такую, где то нашел в сети: CANBT1= 0x26; // CANBT2 = 0x24; // CANBT3=0x13 Все работает и данные идут, но от куда взялись эти парамтры понять не могу, почему из даташина не работают? регистр CANTCON = 0x00; может кто поможет, разораться. :( спаисбо!
  12. Люди есь кто живой? Что может быть такое, на подтверждение отправки приходит TXOK, на приемной стороне тоже все получается, только почему то при чтении регистра CANMSG, там одни нули записаны :(.
  13. Может у кого естьобработчик ошибок от CAN, в интернете много всякой информации, но как конкретно надо обрабаотывать ошибки представление как то не сложилось :(
  14. Разобрался с соединением опторазвязка сделана, поставил резистор 120Ом и заработала, хотя фронты все равно завалины идут. Скорость стоит на 8Мгц 500Kbps.
  15. Подскажите плииз, кто с CAN-ом разбирался, 2ой декнь туплю сижу :(. Для начала хочется увидеть передачу на шине, те на ножке TXCAN свою посылку. Частота настроена, начинаю передавать. Вижу импульсы на TX и каким то боком на RX, это разве нормально? Меняю значения адреса в посылке CANIDT2 и CANIDT1 ничего схожего почему то на осцилографе не вижу? Подключать второй контроллер пока с передачей первого не рахзобрался как то особо не хочется. В прерывание попадаю с флагами CANSTMOB (BERR и SERR), после несокльких неудачных передач, я так понимаю потому что АСК не получена, шина входит в BOFF, это так и должно быть? Пробовал подключить второй контроллер ничгео не именилось, те передача не проходит, АСК не возвращается (