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

phiss25

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

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

  • Посещение

Репутация

0 Обычный

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

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

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Доброго всем времени суток. Обращаюсь к людям,имеющих опыт общения с мелкосхемой от TI CC2520 Понимаю,что тема избитая,но тем не менее....... Вобщем собрал на коленках две платы с CC2520. Контроллер Мега88,компилятор CVAVR. Обмен даже наладил,криво правда пока,но данные передаются. Перерабатывал код от TI для MSP. Так вот,функция чтения из регистров по адресам 0x00-0x3F работает нормально как под отладчиком в пошаговом режиме,так и в "реальном времени"(вывожу через UART на терминал). А вот данные с адресов выше 0x40(CHIPID) нормально считываются только под отладчиком в пошаговом режиме. Если вывожу в терминал,то вижу данные через раз,т.е. считываются значения 0x84 и следом за ним 0x80. В датташите сказано Note that when an address with LSB=0 is read the content of the corresponding address with LSB=1 is buffered. If that address is read immediately after within the same MEMRD instruction, the buffered copy is read. In this way a read of a complete 16 bit word is performed as an atomic operation. Т.е. я считываю буферизированное значение во время второго чтения,но я же это делаю не в одной операции чтения,а в разных! Ткните носом куда копать,4 дня бьюсь над этим. И ещё......Функция чтения регистров при помощи инструкции MEMRD ,взятая из примера для MSP не работает uint8 CC2520_MEMRD8(uint16 addr) { uint8 value; CC2520_SPI_BEGIN(); CC2520_SPI_TXRX(CC2520_INS_MEMRD | HIBYTE(addr)); CC2520_SPI_TXRX(LOBYTE(addr)); value = CC2520_SPI_TXRX(0x00); CC2520_SPI_END(); return value; } работает вот такая,не подскажете в чём причина,что я не так делаю или хотя бы куда копать надо? unsigned char MEMRD(unsigned int addr,unsigned char *data,unsigned int size) { unsigned char status; CC2520_CS_ENABLE(); status = spi(0x10 | HIBYTE(addr) ); spi(LOBYTE(addr-1)); spi(0); spi(0); while(size--) { *data++ = spi(0); } CC2520_CS_DISABLE(); return status; } Буду очень признателен за любые советы.Самому уже в голву ничего не идёт. Компеловская техподдержка(там покупали трансиверы) ничего вразумительного ответить не может,говорит,что должно всё нормально читаться
  2. Здравствуйте всем! Пользовал три модели акселерометров LIS302DLH,MMA7455 и LIS302DL. С первыми двумя всё было нормально(чтение данных ,запись),но вот на днях привезли LIS302DL. При первых нескольких циклах чтения,данные считываются нормально,но потом показания начинают скакать в диапазоне от -10 до +10 единиц(бывает и больше). Контроллер ATMega88,считываю по i2c,подтяжки 4.7ком,расстояние между акселем и контроллером пару сантиметров. Использую аппаратный i2c. Могут ли быть какие-либо помехи или это просто шайтан какой-то?)) По докам отклонения не более 40 mg(в режиме 2g), т.е. примерно 2 отсчёта. Осцилографом ещё не тыкал,завтра хочу попробовать. Может есть у кого мысли какие по этому поводу? Или может кто встречался с похожими проблемами?
  3. А чем скользящее среднее не устраивает? И,кстати,какой акселерометр?
  4. Здравствуйте всем. Я новичок в работе с внешней памятью.Осилил запись,все нормально.Непонятным остается только одно.Когда я отправляю на запись один байт,предположим 0x55 единожды,то при чтении получается,что заполняется область памяти вплоть до адреса 0xFF.А мне нужно записать только по одному адресу.Память AT25160A. Вот код на асме sbi PortB,_CS ldi temp,0x06 ;разрешение записи cbi PortB,_CS ; nop ; nop ; rcall write_mem ;вызов обмена по SPI nop ; nop ; sbi PortB,_CS ;выбор устройства ldi temp,0x02 ;инструкция записи cbi PortB,_CS ; nop nop rcall write_mem ; mov temp,adres_h ;старший адрес rcall write_mem ; mov temp,adres_l ; rcall write_mem ; mov temp,PrH ;младший адрес ldi temp,0x55 ;число для записи rcall write_mem ; nop nop sbi PortB,_CS Операция обмена по SPI взята из даташита на tiny 2313(это мой контроллер) Я читал,что можно осуществить страничную запись,но в 32 байта,а не как у меня Может кто-то сталкивался с такой проблемой? Подскажите,пожалуйста. P.S. Нужна именно побайтная запись
  5. Память AT25160

    Доброго всем времени суток,народ! Я понимаю,что эта тема уже изжевана на форуме,но я ломаю голову уже 3-й день над этой проблемой.Может кто подскажет в чем у меня ошибка.Микруха Tiny 2313,память AT25160A,не могу наладить связь между ними.Код программы прилагается Может кто что умное подскажет,очень на это надеюсь. AT25160A_on_SPI.rar
  6. IAR EWAAVR 3.20

    Доброго всем времени суток! Народ,подскажите,пожалуйта,где можно найти IAR EWAAVR 3.20.Я не нашел ни одной живой ссылки. На сайте iar только 5-я версия.
  7. Извиняюсь за наглость,но нет ли у кого-нибудь набросок или готового алгоритма на асме,как отправлять данные через SPI во внешнюю память EEPROM.Юзаю Tiny2313.Катастрофически не хватает времени,работы навалилось,а диплом делать надо!
  8. Всем большое спасибо! Теперь буду думать,что лучше из двух F-RAM или EEPROM,но с этой задачей, я думаю, справлюсь :)
  9. Не могу определиться с выбором внешней памяти для Tiny2313.Нужно проводить около 3000 измерений и записывать по 2 байта во внешнюю память.Главный преоритет отдается малогабаритности и низкой цене устройства,а также низкому энергопотребленю.Может кто посоветует.До этого момента не имел дела ни с какими видами памяти :07: Буду признателен любым советам
  10. Всем спасибо!Попробовал поменять задержку в настройках кодавижена,все заработало как ни в чем не бывало. Странно все-таки.Классика ничего не требовала.
  11. tiny 2313

    Зравствуйте всем! Вопрос может показаться не актуальным,но не для меня. До настоящего времени пользовал мик-леры ATMEL семейства классик,перешел на tiny.Прошивал при помощи лпт-шного программатора и codevision,сейчас пользуюсь бластером,но программатор тот же.Так вот,тинька распознается в одном случае из ста,а шьется вообще.....В эту же схему вставляю AT90S12000, все пректасно видит и шьет.Не могу понять в чем дело.Кто сталкивался,подскажите че делать,кто не сталкивался-тоже.Буду очень благодарен. P.S. фьюзы вообще не трогаю(снимаю галочку в программе )
  12. Привет всем! Народ,кто подскажет,почему может не работать кварц на tiny2313,хотя на AT90S1200 и AT90S8515 все прекрасно работает,на тех же емкостях,пробовал ставить другие емкости,другие кварцы(4 и 12 Мгц),никакой реакции.Пробовал 4 контроллера из разных партий.Может я че-нить не правильно делаю?
  13. rjmp Init; вектор сброса rjmp ext0; вектор запуска по внешнему прерыванию reti; rjmp CUPT1; вектор прерывания по захвату ;______________________________________________________________________ Init: ldi temp,64 ; out GIMSK,temp ; ldi temp,15 ; out WDTCR,temp ; ldi temp,low(RAMEND); out SPL,temp ; ldi temp,255 ; out DDRB,temp ldi temp,0 ; out DDRD,temp ldi temp,0 ; out PortD,temp ; clr temp ; out UCR,temp ; ldi temp,128 ; out ACSR,temp ; clr temp ; out TCCR1A,temp ; ldi temp,65 ; out TCCR1B,temp ; ldi temp,51 ; ldi temp,0 ; out TCCR0,temp ; ldi temp,8 ; out TIMSK,temp ; ldi temp,128 ; out SREG,temp ; SON:sleep ;_____________________________________________________________________ ;Программа измерения: ext0: CUPT1: in PrL,ICR1L ;сохраняем захваченное значение(по первому пришедшему импульсу) in PrH,ICR1H ;значения таковы,что перенос разряда не нужен tst tempL ;ждем второй импульс,т.е. проверяем записалось ли знечение второго импульса brne M1 ;в регистр tempL,если да, то вычисляем разницу,если нет-ждем mov tempL,PrL ; mov tempH,PrH ;след. импульс M:nop ; rjmp M ; M1:sub tempL,PrL ;значения таковы,что перенос разряда не нужен sbc tempH,PrH ; reti ; И еще,есть мысль обнулять TCNT1 перед началом измерения
  14. Сомневаюсь в правильности написания.Может кто глянет,какие ошибки. По идее должна считать период модель AT90S2313 rjmp Init rjmp ext0 reti rjmp CUPT1 Init:программа инициализации -//-//-//-//-//-//-//-//- -//-//-//-//-//-//-//-//- -//-//-//-//-//-//-//-// ext0: in PеrL,ICR1L; in PеrH,ICR1H; CUPT1: in temp,ICR1L ;сохраняем захваченное значение in tempH,ICR1H ;в рабочих регистрах sub temp,PеrL ;вычисляем разность между sbc tempH,PеrH ;старым и новым значением in PеrL,ICR1L ;запоминаем новое in PеrH,ICR1H ;значение
×
×
  • Создать...