roboforum.ru

Технический форум по робототехнике.

МикроКонтроллер AVR начинающим - общие вопросы

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение avr123.nm.ru » 02 ноя 2010, 18:32

А в порт С отключили ЖТАГ как рекомендовано на страничке 2 курса ?
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Webspider » 03 ноя 2010, 18:00

Большое спасибо за подсказку! Заработало. :)
Webspider
 
Сообщения: 22
Зарегистрирован: 18 окт 2009, 12:36
Откуда: Самара

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение avr123.nm.ru » 03 ноя 2010, 18:47

И то хлеб ! :)
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Webspider » 06 ноя 2010, 23:26

Ещё вопрос: собрал девайс AVR-CDC на Tiny45. При поключении к ПК определяется как неизвестное устройство(Unknown device).
USB Device
Неизвестное устройсво
Новое оборудование установлено и готово к использованию
USB устройство не опознано...

При попытке указать драйвер, система говорит что "В указанном файле нет сведений об устройстве" либо что "драйвер не нуждается в обновлении", в информации о драйвере видно что автоматом ставится какой-то дравер от microsoft, еоторый нельзя откатить(пишет что откатывать нечего). :o
Самое интересное, что эта проблема вылезает только на моём ПК (laptop ASUS N61jq),также при попытке подключения из под WIN7. Проверял на 2х стационарных ПК c WIN XP - всё как по маслу: находит устройство и сам просит указать нужный драйвер, встающий в систему без проблем.
Переустановка чистой ОС ХР не помогла.
Webspider
 
Сообщения: 22
Зарегистрирован: 18 окт 2009, 12:36
Откуда: Самара

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение galex1981 » 07 ноя 2010, 01:11

А фьюзы на Tiny45 верно указаны? Проверьте еще раз
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Webspider » 08 ноя 2010, 23:04

всё верно. проблема не актуальна)

следущее :) :

тестирую передачу символа"1" на PC. в протеусе симулирется нормально. канал передачи работает нормально - замыкаю Rx с Tx --> что пишу в терминале в Transmit то и получаю в Recieve. А вот банальное printf("1") ничего в терминал не даёт.
Идеи?
P.S. Питание Меги = 5В
Питание Tiny = 3.8В (поставил послед. два диода чтобы решить пред. проблему) Может ли в этом крыться причина?
Webspider
 
Сообщения: 22
Зарегистрирован: 18 окт 2009, 12:36
Откуда: Самара

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение galex1981 » 08 ноя 2010, 23:51

Может и в этом причина, приведите пожалуйста схему куда вы поставили 2 диода и укажите что за диоды поставили
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Petr22 » 08 ноя 2010, 23:55

Добрый день! Помогите мне пожалуйста с решением следующего вопроса. Мне в МК AVR ATmega 16 необходимо создать (объявить)большой массив данных во FLASh памяти, при этом мне необходимо массив данных привязать к конкретным адресам ячеек памяти Flash. Это мне нужно сделать с помощью языка СИ. В последствии, я буду использовать ассемблерную вставку, где буду считывать данные массива с назначенных адресов памяти Flash.
В МК 51 (Keil )такая команда на Си есть и мне необходим ее аналог на AVR в компиляторе CodeVisionAVR.

Пример для МК 51 (Keil)
BYTE xdata DATA1[201] _at_ 0x0000; //объявление массива в ОЗУ с адреса 0x0000 по 0х00С8
BYTE xdata DATA2[201] _at_ 0x0100; //объявление массива в ОЗУ с адреса 0x0100 по 0х01С8

Заранее спасибо !
Petr22
 
Сообщения: 4
Зарегистрирован: 08 ноя 2010, 23:29

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение galex1981 » 09 ноя 2010, 00:04

Пример с папки examples:
Код: Выделить всёРазвернуть
// EEPROM access example

// CodeVisionAVR C Compiler
// (C) 2000-2007 HP InfoTech S.R.L.
// www.hpinfotech.ro

// Chip: ATmega8515

flash char f[]="This is a test";
#pragma warn-
eeprom char e[16];
#pragma warn+
char r[16];

void main (void)
{
char flash *ptr_to_flash;
char eeprom *ptr_to_eeprom;
char *ptr_to_ram;

// copy the string f from FLASH to
// the string e in EEPROM
ptr_to_flash=f;
ptr_to_eeprom=e;
while (*ptr_to_flash)
      *ptr_to_eeprom++=*ptr_to_flash++;

// copy the string e from EEPROM to
// the string r in RAM
ptr_to_eeprom=e;
ptr_to_ram=r;
while (*ptr_to_eeprom)
      *ptr_to_ram++=*ptr_to_eeprom++;

// stop here
while (1);
}
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Petr22 » 09 ноя 2010, 00:34

В силу моих возможностей я понял , что в этом примере объявляется массив (на языке Си) в eeprom и каждая ячейка памяти считвается через указатель. Но если я в программе языка Си буду делать вставку ассемблерного кода для считывания данных массива, я не понял к какой ячейке обращаться, здесь в ассемблере указатель уже не будет работать.
Petr22
 
Сообщения: 4
Зарегистрирован: 08 ноя 2010, 23:29

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение galex1981 » 09 ноя 2010, 00:37

Можно этот пример скомпилировать и посмотреть ассемблеровский листинг как идет обращение к этим видам переменных в ассемблере
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Petr22 » 09 ноя 2010, 01:09

При объявлении массива компилятор может разместить в любом месте памяти. И при разных компиляциях (с учетом, что в программе планируется еще объявление массивов ) будет данный массив размещаться то в начале, то в середине памяти. Мне же нужно статически разместить массив, чтобы при добавалении кода программы компилятор не мог разместить массив в другое место памяти. Статичекое размещение нужно мне только из-за асемблера, так как я не знаю как по другому при вставке ассемблерного кода узнать ячейки памяти массива (так как в ассемблере не был объявлен этот массив). При статическом размещении я точно знаю. что например нулевой адрес памяти содержит первый элемент массива. Приведенный мной пример для МК 51 позволя мне так сделать. Если есть другой выход из положения я буду ждать.
PS В противном случае мне придется в ассемблере через диррективу DB вводить весь массив.
Petr22
 
Сообщения: 4
Зарегистрирован: 08 ноя 2010, 23:29

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение galex1981 » 09 ноя 2010, 01:15

Если у вас стоит CVAVR посмотрите листинг. При разных компиляциях адреса массивов разные, но в листинге они и задаются в определенном месте памяти, и с определенного места идет к ним обращение. Просто у меня CVAVR не установлен, только завтра смогу листинг выложить если сами не сможете
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Petr22 » 09 ноя 2010, 01:40

посмотрел листинг, но тут я не уидел с какого по какой адрес он разместил в память массив
.ESEG
.ORG 0
.DB 0 ; FIRST EEPROM LOCATION NOT USED, SEE ATMEL ERRATA SHEETS

.DSEG
.ORG 0xE0
; 1 // EEPROM access example
; 2
; 3 // CodeVisionAVR C Compiler
; 4 // (C) 2000-2007 HP InfoTech S.R.L.
; 5 // www.hpinfotech.ro
; 6
; 7 // Chip: ATmega8515
; 8
; 9 flash char f[]="This is a test";

.CSEG
; 10 #pragma warn-
; 11 eeprom char e[16];

.ESEG
_e:
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
.DB 0x0
; 12 #pragma warn+
; 13 char r[16];

.DSEG
_r:
.BYTE 0x10
; 14
; 15 void main (void)
; 16 {

.CSEG
_main:
; 17 char flash *ptr_to_flash;
; 18 char eeprom *ptr_to_eeprom;
; 19 char *ptr_to_ram;
; 20
; 21 // copy the string f from FLASH to
; 22 // the string e in EEPROM
; 23 ptr_to_flash=f;
; *ptr_to_flash -> R16,R17
; *ptr_to_eeprom -> R18,R19
; *ptr_to_ram -> R20,R21
LDI R30,LOW(_f*2)
LDI R31,HIGH(_f*2)
MOVW R16,R30
; 24 ptr_to_eeprom=e;
__POINTWRM 18,19,_e
; 25 while (*ptr_to_flash)
_0x3:
MOVW R30,R16
LPM R30,Z
CPI R30,0
BREQ _0x5
; 26 *ptr_to_eeprom++=*ptr_to_flash++;
PUSH R19
PUSH R18
__ADDWRN 18,19,1
MOVW R30,R16
__ADDWRN 16,17,1
LPM R30,Z
POP R26
POP R27
RCALL __EEPROMWRB
; 27
; 28 // copy the string e from EEPROM to
; 29 // the string r in RAM
; 30 ptr_to_eeprom=e;
RJMP _0x3
_0x5:
__POINTWRM 18,19,_e
; 31 ptr_to_ram=r;
__POINTWRM 20,21,_r
; 32 while (*ptr_to_eeprom)
_0x6:
MOVW R26,R18
RCALL __EEPROMRDB
CPI R30,0
BREQ _0x8
; 33 *ptr_to_ram++=*ptr_to_eeprom++;
PUSH R21
PUSH R20
__ADDWRN 20,21,1
__ADDWRN 18,19,1
RCALL __EEPROMRDB
POP R26
POP R27
ST X,R30
; 34
; 35 // stop here
; 36 while (1);
RJMP _0x6
_0x8:
_0x9:
RJMP _0x9
; 37 }
_0xC:
NOP
RJMP _0xC


__EEPROMRDB:
SBIC EECR,EEWE
RJMP __EEPROMRDB
PUSH R31
IN R31,SREG
CLI
OUT EEARL,R26
OUT EEARH,R27
SBI EECR,EERE
IN R30,EEDR
OUT SREG,R31
POP R31
RET
Petr22
 
Сообщения: 4
Зарегистрирован: 08 ноя 2010, 23:29

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение galex1981 » 09 ноя 2010, 01:50

Насколько я понимаю, массив типа flash разместили по адресу 0xE0, массив типа eeprom по адресу 0x01
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7