Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
04.12.2007, 12:33
|
#1
|
Частый гость
Регистрация: 22.11.2006
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
at24c128+atmega
Пытаюсь записать данные во внешнюю EEPROM 24C128 и прочитать их. Микроконтроллер ATMEGA8535 . кварц 10 мгц. Данные вывожу на монитор по RS 232.
В ответ получаю FF.
Помогите пожалуйста разобраться.
Исходник прилагаю.
Прикрепленный файл: 7117798.rar
|
|
|
|
04.12.2007, 13:50
|
#2
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Re: at24c128+atmega
Сообщение от msgen1
|
Помогите пожалуйста разобраться.
Исходник прилагаю.
|
А можно вопрос - зачем вы делаете программный I2C если в меге есть аппаратный TWI?
Прикрепленный файл: 7117798.rar
|
|
|
|
04.12.2007, 14:58
|
#3
|
Частый гость
Регистрация: 22.11.2006
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
У меня макетка с Атмегой.
Шина I2c и работа с внешней ЕЕПРОМ мне нужна в дальнейших разработках, для други мк.
|
|
|
|
06.12.2007, 14:56
|
#4
|
Временная регистрация
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
вопрос "контрольный в голову". даже 2:
1. Ждете ли готовности EEPROM после записи (около 5 мс, во время записи она не отвечает на ACK)
2. Корректно ли производятся следующие операции:
START-›EE_I2C_WRITE_ADDR-›DATA_ADDR(2bytes) -›REPEAT_START-›EE_I2C_READ_ADDR-›R.e.a.d.i.n.g....?
В коде разбираться лень, но мне кажеться что с (1) общая напряженка, а (2): адрес на чтение передается раньше, чем REPEAT_START, или я ошибаюсь?
|
|
|
|
07.12.2007, 06:54
|
#5
|
Частый гость
Регистрация: 22.11.2006
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Вот кусок кода на запись:
TWI_write:
sec
rol TWIdata
rjmp TWI_write_first
TWI_write_bit:
lsl TWIdata
TWI_write_first:
breq TWI_get_ack ; Уходим если запись завершена
sbi DDRC,SCLP
brcc TWI_write_low ; Перейти если флаг переноса очищен
nop ; пауза 1 такт
cbi DDRC,SDAP
rjmp TWI_write_high
TWI_write_low:
sbi DDRC,SDAP
rjmp TWI_write_high
TWI_write_high:
rcall Delay_5mkc ; задержка полупериода
cbi DDRC,SCLP
rcall Delay_5mkc ; задержка полупериода
rjmp TWI_write_bit ; продолжаем запись
TWI_get_ack:
sbi DDRC,SCLP
cbi DDRC,SDAP
rcall Delay_5mkc ; задержка полупериода
cbi DDRC,SCLP
TWI_get_ack_wait:
sbis PINC,SCLP ; Ожидаем высокого уровня
rjmp TWI_get_ack_wait
clc
sbic PINC,SDAP
sec
rcall Delay_5mkc ; задержка полупериода
ret
Как видно задержки существуют.
По поводу последовательности чтения, у меня так:
1.Стартуем девайс
2.указываем адрес для чтения
3.Запись в девайс
4.команда девайсу на чтение
5.репстарт
6.Забираем данные из Дата на просмотр
7.стоп девайс
|
|
|
|
07.12.2007, 09:25
|
#6
|
Вид на жительство
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от msgen1
|
rcall Delay_5mkc ; задержка полупериода
ret
Как видно задержки существуют.
По поводу последовательности чтения, у меня так:
1.Стартуем девайс
2.указываем адрес для чтения
3.Запись в девайс
4.команда девайсу на чтение
5.репстарт
6.Забираем данные из Дата на просмотр
7.стоп девайс
|
Вы говорите о разных задержках. rremix писал 5мс, а у Вас 5мкс.
Обратите внимание на параметр Write Cycle Time в даташите. Он для at24c128 на 5В состовляет 10 мс. Нужно учитывать это во время записи страницы в EPROM. ASC во время записи байта сигнализирует о том, что данные записаны в буфер EPROM, но не в саму энергонезависимую память. После STOP внутри ИМС начинается запись в EPROM, которая длиться Write Cycle Time. Внимательно читайте даташит.
Удачи.
-- Прилагается рисунок: --
|
|
|
|
07.12.2007, 11:02
|
#7
|
Частый гость
Регистрация: 22.11.2006
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Спасибо, я понял ошибку.
TWI_get_ack:
sbi DDRC,SCLP
cbi DDRC,SDAP
rcall Delay_5mkc ; задержка
cbi DDRC,SCLP
TWI_get_ack_wait:
sbis PINC,SCLP ; Ожидаем высокого уровня
rjmp TWI_get_ack_wait
clc
sbic PINC,SDAP
sec
rcall Delay_10ms ; задержка 10ms
ret
Но ничего не изменилось..
|
|
|
|
09.12.2007, 19:35
|
#8
|
Временная регистрация
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Ув. nokazus! Буду спорть:
Сообщение от nokazus
|
ASC во время записи байта сигнализирует о том, что данные записаны в буфер EPROM, но не в саму энергонезависимую память
|
Сообщение от 24Cxxx datasheet
|
7.0 ACKNOWLEDGE POLLING
Since the device will not acknowledge during a write
cycle, this can be used to determine when the cycle is
complete (This feature can be used to maximize bus
throughput.) Once the stop condition for a write command
has been issued from the master, the device initiates
the internally timed write cycle. ACK polling can
be initiated immediately. This involves the master
sending a start condition, followed by the control byte
for a write command (R/W = 0). If the device is still busy
with the write cycle, then no ACK will be returned.
Send Stop
|
Таким образом определяется, произошла ли запись в именно в энергонезависимую память. Так можно определять момент завершения при записи больших блоков данных, т.к. задержками неопртимально (нужно давать запасы), а время записи может меняться в зависимости от условий работы (температура, напряжение питания и т.п.)
|
|
|
|
10.12.2007, 09:15
|
#9
|
Вид на жительство
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
rremix
Да тут нечего спорить. Мы говорим о разных вещах. Я о записи байта в буфер микросхемы, а Вы о внутренней записи. Когда байт записывается в ИМС выставляется ACK. После STOP запускается внутренняя запись в EPROM, Write Cykle. Вот тогда Вы можете либо делать задержку, либо опрашивать ACK. Во время же записи байта Вы всегда будете получать ACK.
И еще. Время внутренней записи не зависит от количества байт. Хоть пишите один, хоть 20 - переписывается вся страница целиком.
Удачи.
|
|
|
|
10.12.2007, 10:03
|
#10
|
Вид на жительство
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Задержку надо ставить после формирования STOP в цикле записи. Можно записывать данные постранично. Почитайте PAGE WRITE в даташите. Тогда реально получаем выигрыш в быстродействии и экономим ресурс EEPROM. Если записывать последовательные данные 64 раза по 1 байту, то страница будет переписана 64 раза и задержка составит 64 * 10 = 640 мс. Если писать те же 64 байта в режиме страничной записи, то страница будет переписана 1 раз и задержка составит 10 мс.
Удачи.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
AtMega АЦП
|
impuls-v |
Микроконтроллеры, АЦП, память и т.д |
19 |
20.06.2011 20:12 |
GPS <> ATMega
|
nerozero |
Микроконтроллеры, АЦП, память и т.д |
5 |
11.12.2008 21:26 |
Bootloader Atmega
|
LSergM |
Микроконтроллеры, АЦП, память и т.д |
0 |
23.12.2007 02:32 |
i2c и atmega
|
ams666 |
Микроконтроллеры, АЦП, память и т.д |
3 |
29.11.2007 06:12 |
Atmega,attiny...
|
dosikus |
Микроконтроллеры, АЦП, память и т.д |
38 |
31.08.2007 21:43 |
Часовой пояс GMT +4, время: 10:24.
|
|