AndrewCIK 0 17 июля, 2017 Опубликовано 17 июля, 2017 · Жалоба Здравствуйте! Решил поработать с микроконтроллерами фирмы 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 2 17 июля, 2017 Опубликовано 17 июля, 2017 · Жалоба Ну и собственно вопрос: как можно реализовать работу ds1307 на порту G ? вытащите даташит на m128 и посмотрите для чего предназначены G3/G4.. в вашем случае работу можно реализовать программным i2c-gpio, т.е. управлять контактами эмулируя TWI шину.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 17 июля, 2017 Опубликовано 17 июля, 2017 · Жалоба Начну с того что пишу в CodeVisionAVR v3.12 и микросхема припаяна к порту G микроконтроллера (PORTG.3 и PORTG.4). В программном обеспечении CodeVisionAVR в визарде можно настроить всё пару кликами мыши, но проблема в том что там нет выбора порта G (PORTG)!!! Пробовал без визарда т.е. вручную забить порт G, но выходит ошибка что типа превышен диапазон. Порт G находится в области оперативной памяти, поэтому обращение к нему через команды работы с оперативкой (lds/sts кажется). Ну и адреса соответствующие. Смотрите в доке - там всё написано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndrewCIK 0 19 июля, 2017 Опубликовано 19 июля, 2017 (изменено) · Жалоба Короче далёк я от этого. Пытался понять как это реализовать, но потом сдался и отрезал дорожки и припаял на свободные концы МК. Изменено 19 июля, 2017 пользователем AndrewCIK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 20 июля, 2017 Опубликовано 20 июля, 2017 · Жалоба 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 0 26 сентября, 2017 Опубликовано 26 сентября, 2017 · Жалоба 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) порту. Самое легкое - переназначить на них выводы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться