Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » 24AA256 проблемка


24AA256 проблемка

Сообщений 1 страница 10 из 10

1

Доброго времени суток человек читающий это сообщение. Проблема в следующем. пытаюсь побайтно прошить сиё чудо. На эмуляторе через свой софт и нульмодем виртуальный все работает, а вот в железе начинаются траблы. причем не получается прошить. Читать читается. просто если забить всю область одним значением забивается без проблем. когда дело доходит до програмирования с проги начинаются траблы. отмечу в эмуляторе все пашет.  вот листинг на прошивку. подкажите где я неправ? А то уже кукушку отломал.

$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 9600
$lib "i2c_twi.lbx"

Config Portc.4 = Output
Config Portc.5 = Output

Config Sda = Portc.4                                        'I2C Data
Config Scl = Portc.5                                        'I2C Clock

Config Twi = 100000                                        '20000
Config I2cdelay = 1

Dim Tl As Byte
Dim Th As Byte
Dim T As Word
Dim Dt As Byte
T = 0
Enable Urxc
Enable Interrupts
On Urxc 123

Do

  Loop

123:
Th = High(t)
Tl = Low(t)
I2cstart

I2cwbyte &B10100000
I2cwbyte Th                                                'Th
I2cwbyte Tl                                                'Tl

I2cwbyte Udr
  I2cstop
Incr T
Waitms 5
       Return
  End

0

2

1. "End" долен стоять после "Loop".
2. Судя из страницы №10 документации, вначале устанавливаем адрес записи, а затем начинаем писать данные (как одним байтом, так и просто страницами). Т.е. не нужно каждый раз выставлять адрес (считать его переменной "Т"), он и так автоматом будет увеличиваться пока не сделаете команду "I2cstop".

А работает у вас в эмуляторах потому, что там всё тормозит. В реальном железе, скорее всего данные быстрее приходят, чем успевает записать всё в микруху.
И уберите "Waitms 5" - оно нафиг не нада, только добавляет проблемы (и так всё тормозит).
Вообще алгоритм программы неверный, нельзя задерживать прерывание порта (входящих данных) - это черевато. Нужно делать буфер или синхронную передачу данных.

0

3

RDW написал(а):

2. Судя из страницы №10 документации, вначале устанавливаем адрес записи, а затем начинаем писать данные (как одним байтом, так и просто страницами). Т.е. не нужно каждый раз выставлять адрес (считать его переменной "Т"), он и так автоматом будет увеличиваться пока не сделаете команду "I2cstop".


не не не. Это если постранично писать. если побайтно именно так.  стопить нужно каждый байт . так медленей согласен. Но делаю так . быстро не надо

0

4

RDW написал(а):

Вообще алгоритм программы неверный, нельзя задерживать прерывание порта (входящих данных) - это черевато. Нужно делать буфер или синхронную передачу данных.


в софтовой передачи все учтено. передача идет каждые 20 мс примерно

0

5

вообщем нужно регистры UART хорошо раскурить. ))))

0

6

раз используйте "On Urxc" - значит уарт уже не софтовый  :D (софтовый - это когда INPUT-ом принимаете с пина или ему подобным)

0

7

байт по порту прилетает каждые 1,04 мс, задерживать выполнение прерывания дольше этого времени нельзя (иначе будет пропуск принимаемых данных), а у вас там: обмен по i2c + задержка в 5 мс

Отредактировано RDW (2015-07-23 17:37:13)

0

8

Mrshilov написал(а):

И поставьте Config Twi = 400000.

Интересно а вы пробовали Config Twi = 400000   на частоте 4Мгц? я думаю что врятли. попробуйте )))))))) ERROR 336.

-1

9

RDW написал(а):

раз используйте "On Urxc" - значит уарт уже не софтовый   (софтовый - это когда INPUT-ом принимаете с пина или ему подобным)

А где я писал про софтовый УАРТ покажите? Я употребил выражение "софтовая передача" под ним я понимаю что что вываливается в порт с самодельноого софта. кстати INPUT пашет и на хардварном уарте ))) как бэ

Отредактировано RN6LHC (2015-07-24 09:04:05)

-1

10

RDW написал(а):

байт по порту прилетает каждые 1,04 мс, задерживать выполнение прерывания дольше этого времени нельзя (иначе будет пропуск принимаемых данных), а у вас там: обмен по i2c + задержка в 5 мс


Вы заблуждаетесь байт на данной скорости может прилетать хоть раз в час хоть раз в сутки. старт стоп для чего ?(нам никто не мешает вводить при передачи паузу между байтами ) мк стоит тупо и курит. как байт прилетел чпок и забросил его в I2C. А задержка там не причем. она там стояла когда были танцы с бубном идея была в том что по даташиту время на запись 5мс. только вот не понятно страницы или байта.

-1


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » 24AA256 проблемка