![]() |
|
Модераторы: PILOT, ManiaK, Mazzi |
![]()
|
|
| Гость_Den |
|
|||
|
Unregistered |
Писал прогу для ATmega128 использовал SPI для связи с микросхемой "часы реального времени" (DS1305) - все нормально, все работает, попробовал FRAM - ну ни как не получается.
Помогите разобраться, если пришлете фрагмент кода буду признателен. Если что, пишите. Заранее спасибо. [email protected] |
|||
|
||||
| PILOT |
|
|||
|
производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
А что такое FRAM? Внешнее ПЗУ?
Так вы посмотрите временные диаграммы DS1820 и FRAM'a может они просто разные? СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
| Гость_Den |
|
|||
|
Unregistered |
FRAM - это энергонезависимое сегнетоэлектрическое ОЗУ
временные диаграммы у меня есть, там разница в командах. Но почему не работает не пойму. |
|||
|
||||
| PILOT |
|
|||
|
производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
В командах это не важно, главное, чтобы временные диаграммы совпадали, иначе работать не будет при простой перекоммутации устройств.
А что посылать, изменяется в программе за минуту. СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
| Гость_Den |
|
|||
|
Unregistered |
Конечно, может я делаю что-то не так.
Тогда если не трудно посмотрите описание на то и другое. И если что прояснится подскажите. Спасибо. http://www.gaw.ru/pdf/Maxim/rtc/DS1305.pdf http://www.ramtron.com/lib/literature/FM25640ds_r2.3.pdf |
|||
|
||||
| PILOT |
|
|||
|
производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
страница 12 и страница 8 соответственно. Там указано как писать и читать. И видна разница.
СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
| Гость_Den |
|
|||
|
Unregistered |
Вы хотите сказать, что разница в том что во FRAM в отличие от часов посылается КОП и 2-х байтный адрес?
Если вы об этом, то я это учел, но ни чего хорошего не получилось. Подскажите пожалуста, если я что-то не понимаю или что-то упустил из виду. Да, еще вопрос, может надо сделать какую-нибудь инициализацию? Заранее спасибо! |
|||
|
||||
| PILOT |
|
|||
|
производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
А вывод HOLD к плюс 5 Вольт подсоединен?
А про таблици 1 и 3 в документиции знаешь? СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
| Гость_Den |
|
|||
|
Unregistered |
Посмотрел схему, вход HOLD не запитан и вообще висит в воздухе.
так я что получается зря мучился и FRAM постоянно в режиме прерывания? Я правильно понял? Чтобы все работало надо подать +5В? А что с WP - входом? |
|||
|
||||
| PILOT |
|
|||
|
производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
WP тоже к +5Вольт. Иначе не сможешь писать в статус регистр (правда я не знаю насколько тебе это нужно).
СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
| Гость_Den |
|
|||
|
Unregistered |
Подключили HOLD к +5В, но все равно не получилось.
Я лучше прямо спрашу в моем коде есть ошибки? ; разрешение записи во FRAM lds r16,BYTE_F_SPI sbr r16,1 ; установить флаг "запись" sts BYTE_F_SPI,r16 ldi r16,0 sts CNT_SPI,r16 ; записать кол-во байт записи ldi r16,0x06 ;коп WREN cbi PORTB,PB5 ; выбор FRAM /cs out SPDR,r16 ; записать в регистр данных SPI wait9: sbis PINB,PINB5 rjmp wait9 ; запись во FRAM lds r16,BYTE_F_SPI sbr r16,1 ; установить флаг "запись" sts BYTE_F_SPI,r16 ldi r16,6 sts CNT_SPI,r16 ; записать кол-во байт записи ldi r16,high(BUFER) sts ADR_BUF,r16 ; записать ст. байт нач. адрес буфера записи ldi r16,low(BUFER) sts ADR_BUF+1,r16 ; записать мл. байт нач. адрес буфера записи clr r16 sts BUFER,r16 sts BUFER+1,r16 sts BUFER+2,r16 sts BUFER+3,r16 sts BUFER+4,r16 ldi r16,99 sts BUFER+5,r16 lds r16,BYTE_F_FM sbr r16,2 sts BYTE_F_FM,r16 ldi r16,0x0 sts ADR_FM,r16 ldi r16,0x0 sts ADR_FM+1,r16 ldi r16,0x02 ;коп WRITE cbi PORTB,PB5 ; выбор FRAM /cs out SPDR,r16 ; записать в регистр данных SPI wait: sbis PINB,PINB5 rjmp wait ;***************************************************************************** ;SPI_STC: п/п обработки завершения пересылки SPI ;***************************************************************************** SPI_STC: push r0 push r16 push zl push zh in r0,SREG sei ; разрешить прерывание lds r16,BYTE_F_FM cpi r16,0 breq spi ;передача или прем данных sbrs r16,1 ;передача ст.адреса FRAM rjmp fm2 lds r16,BYTE_F_FM cbr r16,2 sbr r16,4 sts BYTE_F_FM,r16 lds r16,ADR_FM out SPDR,r16 ; записать данные в регистр данных SPI rjmp end_spi fm2: ;;передача мл.адреса FRAM lds r16,BYTE_F_FM clr r16 sts BYTE_F_FM,r16 ldi r16,ADR_FM+1 out SPDR,r16 ; записать данные в регистр данных SPI rjmp end_spi spi: lds zh,ADR_BUF lds zl,ADR_BUF+1 lds r16,BYTE_F_SPI sbrs r16,0 rjmp not_write ; флаг операции "запись" не установлен lds r16,CNT_SPI ; r16 - кол-во байт записи/чтени tst r16 breq spi_1 ; кол-во байт = 0 lds r16,CNT_SPI ; r16 - кол-во байт записи dec r16 sts CNT_SPI,r16 ; кол-во байт - 1 ld r16,z+ ; прочитать данные из ОЗУ sts ADR_BUF,zh sts ADR_BUF+1,zl ; ADR=ADR+1 out SPDR,r16 ; записать данные в регистр данных SPI rjmp end_spi not_write: sbrs r16,1 rjmp read_spi ; флаг "начало чтения" не установлен cbr r16,0b00000010 ; сбросить флаг "начало чтения" sts BYTE_F_SPI,r16 rjmp spi_2 read_spi: in r16,SPDR ; прочитать данные из регистра данных SPI st z+,r16 ; записать данные в ОЗУ sts ADR_BUF,zh sts ADR_BUF+1,zl ; ADR=ADR+1 lds r16,CNT_SPI ; r16 - кол-во байт чтени dec r16 sts CNT_SPI,r16 ; кол-во байт - 1 tst r16 breq spi_1 ; кол-во байт = 0 spi_2: ldi r16,0x55 out SPDR,r16 ; записать 55h в регистр данных SPI rjmp end_spi spi_1: lds r16,BYTE_F_SPI cbr r16,0b00000001 ; сбросить флаг "запись" sts BYTE_F_SPI,r16 cbi PORTB,PB0 ; сбросить флаг "часы выбраны" sbi PORTB,PB5 ; сбросить флаг "FM выбран" end_spi: out SREG,r0 pop zh pop zl pop r16 pop r0 reti |
|||
|
||||
| smalcom |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 494 Регистрация: 16.10.2004 Где: Dnepr Репутация: 4 Всего: 7 |
На мыло к тебе достучаца не получилось вот примерчик, у меня все работает
-------------------- What DA F...??? |
|||
|
||||
| Гость_Den |
|
|||
|
Unregistered |
Я конечно в Си не очень, но огромное спасибо за помощь.
Я свое немного подкорректировал и все получилось. |
|||
|
||||
![]()
|
| Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |