Страница 10 из 421

Добавлено: Сб апр 19, 2008 14:01:07
tych
Если переменные в EEPROM не инициализировать то ее ресурс может быть исчеран быстрей.

Добавлено: Вс апр 20, 2008 09:15:56
ge-nka
Значит если я моей переменой задаю определёное значение при объявлении
допустим eeprom Мояпременая=0 ; вонинг пропадает.
Но это выходит что если я её значение изменил во время работы программы
то выключаем питание, включаем и моя переменая опять получается 0.
Или я ошибаюсь?

Добавлено: Вс апр 20, 2008 09:51:45
tych
Если прога ее изменила то она станет другой конечно. для этого и есть eeprom

Добавлено: Вс апр 20, 2008 11:18:57
Aheir
Лично я предпочитаю использовать собственноручно написанные процедуры для работы с ЕЕПРОМ, чего и Вам желаю. Причем часто - с контролем числа записей в одну ячейку и переносом данных в другую область ЕЕПРОМ при приближении к пороговому значению ресурса перезаписей (см. даташит). А вообще, про ЕЕПРОМ в AVR уже есть отдельные темы, используйте поиск.

Добавлено: Ср апр 23, 2008 19:35:46
Tohey
А как представить рабочий регистр переменной? Что бы работать можно было с битами, как например с портами можно, ведь для регистров тоже есть битовые асм-команды.

Добавлено: Ср апр 23, 2008 20:49:14
ARV
Tohey писал(а):А как представить рабочий регистр переменной? Что бы работать можно было с битами, как например с портами можно, ведь для регистров тоже есть битовые асм-команды.
а зачем это? если вы работаете на своем любимом CodeVision C, то распределение переменных по регистрам берет на себя компилятор, а с битами вы уж работайте СИШНЫМИ операторами. при первой же возможности компилятор будет автоматически использовать подходящие ассемблерные комнды. Пример:

var |= (1<<4);

будет скомпилировано примерно в такую конструкцию

sbr r18, 4

Добавлено: Ср апр 23, 2008 21:46:24
Tohey
Не знаю чей любимый, второй раз в жизни на С пишу.

Вот что получилось:
; 115 var |= (1<<4);
LDI R30,LOW(16)
OR R4,R30

Он назначил R4 переменной var, а мне бы хотелось самому привязать к var свой любимый регистр. К тому же с R4 понятное дело sbr не прокатит.

Добавлено: Пт апр 25, 2008 14:36:02
tych
Tohey писал(а):мне бы хотелось самому привязать к var свой любимый регистр.
Привяжите. Есть ведь FAQ по микроконтроллерам - там все описно с примерами.

======

var |= (1<<4);

У меня вот так скомпилилось

LDS R30,_var
ORI R30,0x10
STS _var,R30

А если var уже использовалось в проге то так:

ORI R30,0x10
STS _var,R30

WinAVR 20080407 сделал аналогично - как и CVAVR

lds r24, 0x0077
ori r24, 0x10
sts 0x0077, r24

Добавлено: Пт апр 25, 2008 23:39:17
Tohey
И к чему все эти коды? Ведь этож не битовые команды... Как привязать, я так и не вычитал. Он сам назначает что ему взбредет. Наверно с SBR он вообще не дружит, непонятно откуда ARV это написал.

Добавлено: Сб апр 26, 2008 08:51:42
ARV
гм... а зачем вам понадобилась именно команда SBR? какая разница по сравнению с той же ORI? А привязать к регистру(регистрам) довольно просто, по крайней мере в WinAVR:

Код: Выделить всё

register unsigned char var asm("r18"); // var будет привязана к r18

Добавлено: Сб апр 26, 2008 10:20:19
tych
Tohey писал(а):Как привязать, я так и не вычитал.
в FAQ это - "CVAVR размешение переменных в регистры.txt"

Добавлено: Вс апр 27, 2008 10:03:22
Tohey
Всем спасибо!

Добавлено: Пт май 09, 2008 18:06:55
ipkin
Пытаюсь прочитать данные из датафлэш AT45DB161 (SO-8)
пишу на Си (раньше делал на асме всё ок)
флэш подключена к SPI контроллера на порт B
вот код

#include <mega64>
#include <io>
#include <stdio>

char c;
void setup() // настройка переферии МК
{
PORTB= 0x0D;
DDRB = 0x07; // Настройка выводов порта PortB
SPCR = 0x5C; // Конфигурация SPI
}


void main(void)
{
setup();
SPDR=0x68; //Передача команды непрерывного чтения из AT45DB161
while (!(SPSR & 0x80));
SPDR=0x00; //Передача адреса откуда будем читать 3 байта 000000h
while (!(SPSR & 0x80));
SPDR=0x00;
while (!(SPSR & 0x80));
SPDR=0x00;
while (!(SPSR & 0x80));
SPDR=0xFF; //Передача 4-х незначащих байт FFh
while (!(SPSR & 0x80));
SPDR=0xFF;
while (!(SPSR & 0x80));
SPDR=0xFF;
while (!(SPSR & 0x80));
SPDR=0xFF;

loop:
while (!(SPSR & 0x80)); //Приём информации из AT45DB161
c=SPDR;
goto loop;
}
мне нужно только чтение с указаных мной адресов
запись не нужна
(это к тому если будете предлагать посмотреть пример задача7 из курса АВР)
это мои первые шаги на Си так что сильно не пинайте
спасибо

Добавлено: Пт май 09, 2008 19:59:04
tych
с - хорошее имя для переменной ! Сразу видно руская она или латинская.

Хоршее начало !
ipkin писал(а):это к тому если будете предлагать посмотреть пример задача7 из курса АВР
Ни в коем разе !!! НЕ советую читать, а то вдруг потом правильно напишите ...

Добавлено: Пт май 09, 2008 20:18:43
ipkin
а компилятор типа не разбирается латинская это с или русска с
это погоды не делает менял на другие сиволы
уважаемый Tych Вы бы как учитель подсказали что не так
дело в том что я ваш файл at45d161.h не могу приспособить к своей проге там (для меня мало комментариев т.к я делаю первые шаги на СИ)

Добавлено: Пт май 09, 2008 21:55:09
tych
Пример в задаче 7 я отлаживал (как - в задаче 4 написано) "в железе" так как в имуляторах такой памяти нету - пример работает.

У вас как то странно выглядит это:

Код: Выделить всё

loop: 
while (!(SPSR & 0x80)); //Приём информации из AT45DB161 
c=SPDR; 
goto loop; 
Это бесконечный цикл.

В задаче 7 курса вот так читается:

Код: Выделить всё

    while (buffer_counter < 528)                          
    {
        SPDR = 0xFF;                        
// write dummy value to start register shift
        while (!(SPSR & temp));             
// wait for data transfer to be completed
         
while (!USR.5); // ждем пока освободится UDR
        
UDR = SPDR;  // записываем байт принятый по SPI из памяти в UART
                
buffer_counter++;
     }

Добавлено: Пт май 09, 2008 22:08:38
ipkin
как нет такой памяти если она у меня на платке запаяна 8-ноговая
на асме я с ней работал всё чётко сейчас тоже самое но только на СИ

чтение у меня идёт не из буфера а из массива памяти (команда 68 по ДШ)
бесконечный цикл я сделал чтобы осцилом можно было посмотреть ипульсы на выходе датафлэш
в дальнейшем там будет цикл определённого размера для чтения нужного кол-во байт
вот цикл:
static unsigned int j;
for (j=0;j<1024;j++)
{
while (!(SPSR & 0x80)); //Ïðè¸ì èíôîðìàöèè èç AT45DB161
i=SPDR;
}

Добавлено: Сб май 10, 2008 10:10:03
tych
ipkin писал(а):как нет такой памяти если она у меня на платке запаяна 8-ноговая
Яж пишу: в СИМУЛЯТОРАХ НЕТУ.

Добавлено: Ср май 14, 2008 13:33:06
tych
CVAVR 2.03.2 - добавлено много нового
http://www.hpinfotech.ro/html/cvavr_history.htm

Размер демки вырос с 2 до 8 Мб.

Добавлено: Сб май 24, 2008 14:30:26
tych
Прикол ! Демо CodeVisionAVR V2.03.2 компилит полную память ATmega8 !!!
http://kazus.ru/forum/topics/f_81220.html#81220

мегу16 32 64 тоже протестил - компилятся !