Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Atmega128 и DS1307 через порт G
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
AndrewCIK
Здравствуйте!
Решил поработать с микроконтроллерами фирмы 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 ?
Jury093
Цитата(AndrewCIK @ Jul 17 2017, 10:06) *
Ну и собственно вопрос: как можно реализовать работу ds1307 на порту G ?

вытащите даташит на m128 и посмотрите для чего предназначены G3/G4..
в вашем случае работу можно реализовать программным i2c-gpio, т.е. управлять контактами эмулируя TWI шину..
mempfis_
Цитата(AndrewCIK @ Jul 17 2017, 10:06) *
Начну с того что пишу в CodeVisionAVR v3.12 и микросхема припаяна к порту G микроконтроллера (PORTG.3 и PORTG.4). В программном обеспечении CodeVisionAVR в визарде можно настроить всё пару кликами мыши, но проблема в том что там нет выбора порта G (PORTG)!!! Пробовал без визарда т.е. вручную забить порт G, но выходит ошибка что типа превышен диапазон.


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

demiurg_spb
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
Ftron
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) порту.
Самое легкое - переназначить на них выводы



Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.