Программирование ATtiny13
Re: Программирование ATtiny13
Нашел тока как через *.cof работать. Но про отладку под Протеус тогда можно забыть.
- Реклама
Re: Программирование ATtiny13
пробую в протеусе отладить код c eeprom (CodeVisiionAVR - разобрался с отладкой!)
Код: Выделить всё
#include <tiny13a.h>
#include <bcd.h>
#include <delay.h>
//#include <sleep.h>
#define CE PORTB.2 //
#define CL PORTB.1 //
#define DA PORTB.0 //
byte
set0, set, sw_key ;// номер запомненной позиции настройки
unreal
f_tun;
[b] unreal eeprom set_frq[4]={145450, 145575, 145500, 157100};[/b]
//unreal set_frq[4]={145450, 145575, 145500, 157100};
// byte eeprom chan0=0;
byte chan0=0;
но для Протеуса нужен файлик *.bin и с помощью утилиты hex2bin я его получаю
но при отладке в протеусе в окне EEPRom переменных изменен ли один несчастный байт.
Может кто подскаже что я делаю не так.
- slav0n
- Опытный кот
- Сообщения: 882
- Зарегистрирован: Ср дек 01, 2010 00:38:15
- Откуда: Харьков
- Контактная информация:
Re: Программирование ATtiny13
нигогда и низачем не создавал еепэ
все в прошивке
Добавлено after 4 minutes 1 second:
эстэмщики, кстати, этот рудимент удалили
все в прошивке
Добавлено after 4 minutes 1 second:
эстэмщики, кстати, этот рудимент удалили
ohmycode!
primuss3.com
primuss3.com
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18675
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Программирование ATtiny13
не забывайте, что EEPROM записывается 4 мс - вы по часам протеуса ждете не меньше этого, прежде чем посмотреть дамп памяти?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Re: Программирование ATtiny13
http://kazus.ru/forums/showthread.php?t=14223
Нашел ответ, пока не разбирался но уже сработало
Debug - Reset Persistent Model Data
Добавлено after 3 minutes 36 seconds:

Нашел ответ, пока не разбирался но уже сработало
Debug - Reset Persistent Model Data
Добавлено after 3 minutes 36 seconds:
- slav0n
- Опытный кот
- Сообщения: 882
- Зарегистрирован: Ср дек 01, 2010 00:38:15
- Откуда: Харьков
- Контактная информация:
Re: Программирование ATtiny13
поверьте наслово, не дебаджил ни разу
Добавлено after 4 minutes 56 seconds:
дебаг для трусов
Добавлено after 4 minutes 56 seconds:
дебаг для трусов
ohmycode!
primuss3.com
primuss3.com
Re: Программирование ATtiny13
[uquote="ARV",url="/forum/viewtopic.php?p=4042417#p4042417"]не забывайте, что EEPROM записывается 4 мс - вы по часам протеуса ждете не меньше этого, прежде чем посмотреть дамп памяти?[/uquote]
typedef unsigned char byte ;
typedef unsigned int real ;
typedef unsigned long unreal ;
#include <tiny13a.h>
#include <bcd.h>
#include <delay.h>
//#include <sleep.h>
#include <eeprom.h>
#define CE PORTB.2 //
#define CL PORTB.1 //
#define DA PORTB.0 //
byte
set0, set, sw_key ;// номер запомненной позиции настройки
unreal
f_tun, frq;
unreal eeprom set_frq[4]={145450, 145575, 145500, 157100};
//unreal set_frq[4]={145450, 145575, 145500, 157100};
// byte eeprom chan0=0;
byte chan0=0;
я объявляю и инициализирую ЕЕпром в секции объявления переменных.
Может здесь что-то не так.
Проблема сейчас в том что в отладке массив пустой, хотя в ЕЕпром памяти переменные уже в порядке
typedef unsigned char byte ;
typedef unsigned int real ;
typedef unsigned long unreal ;
#include <tiny13a.h>
#include <bcd.h>
#include <delay.h>
//#include <sleep.h>
#include <eeprom.h>
#define CE PORTB.2 //
#define CL PORTB.1 //
#define DA PORTB.0 //
byte
set0, set, sw_key ;// номер запомненной позиции настройки
unreal
f_tun, frq;
unreal eeprom set_frq[4]={145450, 145575, 145500, 157100};
//unreal set_frq[4]={145450, 145575, 145500, 157100};
// byte eeprom chan0=0;
byte chan0=0;
я объявляю и инициализирую ЕЕпром в секции объявления переменных.
Может здесь что-то не так.
Проблема сейчас в том что в отладке массив пустой, хотя в ЕЕпром памяти переменные уже в порядке
Re: Программирование ATtiny13
slav0n, невероятно, но факт
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18675
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Программирование ATtiny13
вы имеете ввиду окно просмотра переменных при отладке? так этот массив там и будет пустым, потому как протеус не умеет понимать массивы в FLASH или EEPROM. среди отладочной информации, как я понимаю, нет признака того, что массив не в ОЗУ, вот протеус и не находит егоolegue писал(а):Проблема сейчас в том что в отладке массив пустой
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Программирование ATtiny13
Решил и эту проблему. Как меня кажется - банальная невнимательность!
Добавлено after 24 minutes 56 seconds:

ARV,
все верно Вы писали, в отладке нет переменных и массива с ЕЕпром данными, ни просто переменной канала с номером хранящимся в ЕЕпром.
Кстати что бы не было вот этого сообщения
chan R-252 Item (1 bytes at 0xFFFFFF04) not within memory block (0x000000A0 bytes).
напротив переменной в отладке, нужно временно объявить ее Volatile. ( об этом здесь https://electronix.ru/forum/index.php?a ... &id=131765)
кстати, как я понял о работе с ЕЕпром то сначала объявляем переменные и инициализируем их
unreal eeprom set_frq[4]={145450, 145575, 145500, 157100};
после чего можно зделать built all, создав *ееp файл
после чего в коде можно оставить лишь объявление переменной ЕЕпром
unreal eeprom set_frq[4]
правильно я понимаю?
Добавлено after 24 minutes 56 seconds:
ARV,
все верно Вы писали, в отладке нет переменных и массива с ЕЕпром данными, ни просто переменной канала с номером хранящимся в ЕЕпром.
Кстати что бы не было вот этого сообщения
chan R-252 Item (1 bytes at 0xFFFFFF04) not within memory block (0x000000A0 bytes).
напротив переменной в отладке, нужно временно объявить ее Volatile. ( об этом здесь https://electronix.ru/forum/index.php?a ... &id=131765)
кстати, как я понял о работе с ЕЕпром то сначала объявляем переменные и инициализируем их
unreal eeprom set_frq[4]={145450, 145575, 145500, 157100};
после чего можно зделать built all, создав *ееp файл
после чего в коде можно оставить лишь объявление переменной ЕЕпром
unreal eeprom set_frq[4]
правильно я понимаю?
Re: Программирование ATtiny13
Можно так. Можно просто в коде при старте прочитать ячейки, и если они вдруг равны 0xffff.... то значит инициализируем их этими значениями.
Re: Программирование ATtiny13
а ячейки все читать? Это я к тому что память ведь распределяется в соответсвии с объявленными типами и по попрядку. Так ведь?
Добавлено after 9 minutes 10 seconds:

хотел еще воткнуть сюда 7seg индикатор через hc595, и освободить еще одну ножку (RESET DISABLE) что бы были кнопки ВПЕРЕД-НАЗАД. но памяти не хватает
Добавлено after 16 minutes 14 seconds:
А это код для считалки на семисегметной индикаторе
там есть спорные моменты, но в 300 байт врядли можно вложиться
Добавлено after 9 minutes 10 seconds:
хотел еще воткнуть сюда 7seg индикатор через hc595, и освободить еще одну ножку (RESET DISABLE) что бы были кнопки ВПЕРЕД-НАЗАД. но памяти не хватает
Добавлено after 16 minutes 14 seconds:
А это код для считалки на семисегметной индикаторе
там есть спорные моменты, но в 300 байт врядли можно вложиться
Спойлер
Код: Выделить всё
/*******************************************************
Chip type : ATtiny13
AVR Core Clock frequency: 8,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 16
*******************************************************/
#include <tiny13.h>
#include <delay.h>
#define CE PORTB.2
#define CL PORTB.1
#define DI PORTB.0
#define RS PORTB.3
#define pause delay_ms(10)
//макрос инвертировани бита (там делльше это понадобится в побидной отправке в регистр сдвига, така отправка идет не с того боку.
#define INVERT_BYTE(a) ((a&1)<<7) | ((a&2)<<5) | ((a&4)<<3) | ((a&8)<<1) | ((a&16)>>1) | ((a&32)>>3) | ((a&64)>>5) | ((a&128)>>7)
//char data[8]= {0,1,1,0,1,1,0,1};
// char c=0b01101101;
char i,j ;
// Declare your global variables here
void showData(char c)
{
char a;
a=INVERT_BYTE (c); // нужно инвертировать байт
i=0;
CE=0; //Отопрем защелку , (если заперта -повторный запуск)
while(i<8)
{
//DI=dt[i];
DI=(a >> i) & 1 ; // инвертированный байт посылаем в регистр сдвига побитно
CL = 1;
RS=1;
pause;
DI=0;
CL = 0;
RS=0;
pause;
i++;
};
CE=1;
}
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
//showData(0b01101101) ;
j=0;
while (1)
{
switch (j) {
case 0:showData(0b00111111); break;
case 1:showData(0b00000110); break;
case 2:showData(0b01011011); break;
case 3:showData(0b01001111); break;
case 4:showData(0b01100110); break;
case 5:showData(0b01101101); break;
case 6:showData(0b01111101); break;
case 7:showData(0b00000111); break;
default:
};
j++;
if (j>7) {j=0;};
}
}Re: Программирование ATtiny13
тут такая тема. Пока не нажата кнопка идет перебор частот, а как тока нажата остановка пока не отпустят
написал вот такое , но мне оно совершенно не нравиться. Что я упускаю?
Добавлено after 1 minute 18 seconds:
нажатие кнопки будет транзисторным ключом. т.е как бы дребезг обрабатывать не нужно (?)
написал вот такое , но мне оно совершенно не нравиться. Что я упускаю?
Код: Выделить всё
while (1)
{
if(PINB.4 == 1)
{ // если не нажата кнопка (нет несущей) перебираем каналы
chan++; set=chan; //переключим канал
if (chan>3) {chan=0;set=0;} // каналы от 0 до 3 (4канала)
f_tun = set_frq [chan];
write_lm7001 ();
}
else {//а тут слушаем эфир. Так что ли? }
}
нажатие кнопки будет транзисторным ключом. т.е как бы дребезг обрабатывать не нужно (?)
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1916
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Программирование ATtiny13
else ... лишнее. И без того цикл вращается.
При нажатии кнопки над определенного времени рискуете изменить больше каналов, чем один.
Нужна либо задержка, либо подтверждение того, что напр. зар. частоты в LM7001 завершена.
С кнопки лучше управлять флаг, напр. есть_изменение.
А затем проверьте изменение в другом проверке и делаете действие.
На всякий случай я бы добавил код и для button debounce (может быть самый простой, с двойным чтением с паузой).
Tакже для стабильности я бы перевернул логику кнопок с "активным нулем", к GND.
При нажатии кнопки над определенного времени рискуете изменить больше каналов, чем один.
Нужна либо задержка, либо подтверждение того, что напр. зар. частоты в LM7001 завершена.
С кнопки лучше управлять флаг, напр. есть_изменение.
А затем проверьте изменение в другом проверке и делаете действие.
На всякий случай я бы добавил код и для button debounce (может быть самый простой, с двойным чтением с паузой).
Tакже для стабильности я бы перевернул логику кнопок с "активным нулем", к GND.
Код: Выделить всё
while (1) {
if (!PINB.4) {
delay_ms(20);
if (!PINB.4)
b = TRUE;
}
if (b) {
b = FALSE;
chan++;
set = chan; // переключим канал
if (chan > 3) {
chan = 0; // каналы от 0 до 3 (4 канала)
set = 0;
}
f_tun = set_frq[chan];
write_lm7001();
}
}Re: Программирование ATtiny13
veso74, по Вашему коду получается, что если не нажата, то перебираем частоты с замедлением в 20мс, а если нажата то просто все останавливается и слушаем частоту.
Правильно я понял?
Правильно я понял?
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1916
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Программирование ATtiny13
Нет, наоборот: если нажата: перебираем частоты, а если ненажата: слушаем частоту.
Kнопкa: к GND, нужен подтягивающий резистор к +, внутренний или внешний. 20 ms - время для button debounce.
Kнопкa: к GND, нужен подтягивающий резистор к +, внутренний или внешний. 20 ms - время для button debounce.
- Вложения
-
- switch_bounce.jpg
- (62.74 КБ) 104 скачивания
Re: Программирование ATtiny13
veso74, или я немного запутался или Вы меня неправильно поняли.
"кнопка" - это сигнала ШП, который управляем транзистором, который соответствующий пин МК садит на массу

ну вот наподобии как здесь сделан mute для lm386
Добавлено after 2 minutes 59 seconds:
Сигнал ШП появился - Транзистор притянул 4 пин МК к массе - остановился цикл - слушаем канал
"кнопка" - это сигнала ШП, который управляем транзистором, который соответствующий пин МК садит на массу
ну вот наподобии как здесь сделан mute для lm386
Добавлено after 2 minutes 59 seconds:
Сигнал ШП появился - Транзистор притянул 4 пин МК к массе - остановился цикл - слушаем канал
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1916
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Программирование ATtiny13
Реакция кода видно и может быть проверен с помощью светодиодов даже без участия радио. Это не меняет способ управления (код с флагами и с denounce). Измените уровни срабатывания логики, как необходимо на Вашем схемме (коррекция строку программы или добавление другую, если это необходимо).


