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

    

Atmega128 и DS1307 через порт G

Здравствуйте!

Решил поработать с микроконтроллерами фирмы ATMEL и чтобы не тратиться я решил найти какую-нибудь готовую плату с микроконтроллером. Поискав на работе среди хлама, нашёл плату с микроконтроллером atmega128-16au. Плата от какого-то анализатора и поэтому имеет дисплей (hd4478), кнопки (6шт.), светодиоды (11шт.), а так же впаяна микросхема реального времени ds1307 c которой и возникли проблемы.

 

С кнопками, светодиодами и экраном проблем не возникло - всё работает, а вот с микросхемой ds1307 проблемы - не могу запрограммировать.

 

Начну с того что пишу в CodeVisionAVR v3.12 и микросхема припаяна к порту G микроконтроллера (PORTG.3 и PORTG.4). В программном обеспечении CodeVisionAVR в визарде можно настроить всё пару кликами мыши, но проблема в том что там нет выбора порта G (PORTG)!!! Пробовал без визарда т.е. вручную забить порт G, но выходит ошибка что типа превышен диапазон.

 

#asm

.equ __i2c_port=0x65;

.equ __sda_bit=4;

.equ __scl_bit=3;

#endasm

 

Паяли это всё на заводе и прикол в том что эта плата работала на реальном оборудовании! Я же просто хотел перепрограммировать её чтоб поучиться)))

 

Ну и собственно вопрос: как можно реализовать работу ds1307 на порту G ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ну и собственно вопрос: как можно реализовать работу ds1307 на порту G ?

вытащите даташит на m128 и посмотрите для чего предназначены G3/G4..

в вашем случае работу можно реализовать программным i2c-gpio, т.е. управлять контактами эмулируя TWI шину..

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Начну с того что пишу в CodeVisionAVR v3.12 и микросхема припаяна к порту G микроконтроллера (PORTG.3 и PORTG.4). В программном обеспечении CodeVisionAVR в визарде можно настроить всё пару кликами мыши, но проблема в том что там нет выбора порта G (PORTG)!!! Пробовал без визарда т.е. вручную забить порт G, но выходит ошибка что типа превышен диапазон.

 

Порт G находится в области оперативной памяти, поэтому обращение к нему через команды работы с оперативкой (lds/sts кажется). Ну и адреса соответствующие. Смотрите в доке - там всё написано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Короче далёк я от этого. Пытался понять как это реализовать, но потом сдался и отрезал дорожки и припаял на свободные концы МК.

 

 

Изменено пользователем AndrewCIK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CodeVisionAVR в топку! Используйте avr-gcc.

 

Для начала лучше:

https://sourceforge.net/projects/winavr/files/

 

потом, когда вдруг потребуется что-то свеженькое:

http://www.microchip.com/development-tools/atmel-studio-7

+

http://www.atmel.com/ru/ru/tools/ATMELAVRT...FORWINDOWS.aspx

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Memphis правильно писал-

В контроллере АТМега128 команды обращения к портам F и G немного отличается от обращения к остальным (А-Е) портам,

например команда ассемблера OUT заменяется на команду STS,

а команда IN на LDS (по информации от Atmel из-за удаленности в карте адресов этих портов)

 

Поэтому все обращения к этим портам F,G (даже инициализация выводов этих портов) команды IN и OUT не работают.

Ваша команда

.equ __i2c_port=0x65;

не разрешит обращаться по команде IN R16,0x65 , но разрешит по команде LDS R16,0x65

Это надо объяснить CodeVisionAVRу.

Сам стандартный порт I2C находится на D0(SCL), D1(SDA) порту.

Самое легкое - переназначить на них выводы

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация