Мелкие вопросы по МК и ПЛИС.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
shemmer писал(а):Я имел ввиду необходимо ли создавать масивы?
Или же здесь другой подход к алгоритму в целом?
Поделитесь секретами программирования по SPI
1. в какой-то из тем я уже писал об автономном программаторе... думаю, надо использовать SD/MMC карту для хранения обычных файлов прошивок, копировать их туда с компа, а потом МК считывает их и шьёт куда надо
2. а секреты - они на то и секреты, чтобы ими не делиться
3. в даташитах все написано, SPI - он и в африке SPI.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Начал изучать,подскажите как это работает:
ldi Temp1 ,0
ldi Temp2 ,0
ldi Temp3 ,10
Loop: dec Temp1
brne Loop
dec Temp2
brne Loop
dec Temp3
brne Loop
-непонятно то,что для задержки берутся три регистра,на первом цикле brne сравнивает значение регистра1 с нулем,когда в регистре насчитался нолик brne отпускает ход программы(с метки),программа пошла дальше...и натыкается на 2-й регистр(высчитывается),а потом снова brne Loop,т.е. происходит переход на метку или теперь сравнивается второй регистр? Temp2
brne Loop
dec Temp3
brne Loop
ldi Temp1 ,0
ldi Temp2 ,0
ldi Temp3 ,10
Loop: dec Temp1
brne Loop
dec Temp2
brne Loop
dec Temp3
brne Loop
-непонятно то,что для задержки берутся три регистра,на первом цикле brne сравнивает значение регистра1 с нулем,когда в регистре насчитался нолик brne отпускает ход программы(с метки),программа пошла дальше...и натыкается на 2-й регистр(высчитывается),а потом снова brne Loop,т.е. происходит переход на метку или теперь сравнивается второй регистр? Temp2
brne Loop
dec Temp3
brne Loop
Программу для автономного программатора вроде-бы написал
Инициализировал SPI,
Ак как разместить прошивку в прошивке программатора?
Если разместить со свободного адреса во Flash-файле то при открывании такой флеши программа пишет invalid data in flash.
Подскажите как разместить прошивку-клон в прошивке программаторе
Инициализировал SPI,
Ак как разместить прошивку в прошивке программатора?
Если разместить со свободного адреса во Flash-файле то при открывании такой флеши программа пишет invalid data in flash.
Подскажите как разместить прошивку-клон в прошивке программаторе
ОБЬЯСНИТЕЕЕ!!! Читал обучалку про массивы,теперь по ночам не сплю,немогу понять почему чтоб узнать адрес массива, записанного в памяти программ надо умножать метку на 2??? Стоит она у меня например по адресу $007, так зачем её адрес записывать как $00E???
И почему, раз уж в обучалке написано что каждая команда содержит 2 байта, то адреса прерываний в .inc файле для 2313 пишутся $001, $002, $003 и т.д? это значит на каждый адрес приходиться 2 байта? Зачем тогда у mega16def.inc адреса прерываний пишутся $002, $004, $006?
И почему, раз уж в обучалке написано что каждая команда содержит 2 байта, то адреса прерываний в .inc файле для 2313 пишутся $001, $002, $003 и т.д? это значит на каждый адрес приходиться 2 байта? Зачем тогда у mega16def.inc адреса прерываний пишутся $002, $004, $006?
- Ka3ax
- Родился
- Сообщения: 18
- Зарегистрирован: Чт фев 07, 2008 14:25:22
- Откуда: от туда
- Контактная информация:
leshiy писал(а):Начал изучать,подскажите как это работает:
ldi Temp1 ,0
ldi Temp2 ,0
ldi Temp3 ,10
Loop: dec Temp1
brne Loop
dec Temp2
brne Loop
dec Temp3
brne Loop
-непонятно то,что для задержки берутся три регистра,на первом цикле brne сравнивает значение регистра1 с нулем,когда в регистре насчитался нолик brne отпускает ход программы(с метки),программа пошла дальше...и натыкается на 2-й регистр(высчитывается),а потом снова brne Loop,т.е. происходит переход на метку или теперь сравнивается второй регистр? Temp2
brne Loop
dec Temp3
brne Loop
brne проверяет есть ли [на ] НОЛЬ в регистре
под которым он написан
то есть
Код: Выделить всё
Loop: dec Temp1
brne Loopпроверяет TEMP1
Код: Выделить всё
dec Temp2
brne Loopпроверяет TEMP2
Код: Выделить всё
dec Temp3
brne Loopпроверяет TEMP3
это вложенный цикл задержки, для того, что бы увеличить
время. по идее можно и далее наращивать.
само быстро отрабатывает
Код: Выделить всё
Loop: dec Temp1
brne Loopв 256 раз медленнее
Код: Выделить всё
Loop: dec Temp2
brne Loop"обнуляется", еденица добавляется к содержимому регистра, только
после того, как переполнится регистр TEMP1
Спасибо,додУмкал
мне оказалось не хватало ресурсов для понимания,а именно...
Пошла программа...
...
ldi Temp1 ,0 ;сказали регистру(R16),что он "Ноль" и пошли дальше...
ldi Temp2 ,13 ;тут мы открыли регистру(R17) что его цена 13...
Loop: dec Temp1 ;вешаем ярлык на объект,который заставляет идти нас этой дорогой...dec вычисляет из регистра(R16) единицу...
brne Loop ;проверяет регистр(R16) на нуль,и если он не нуль,то отправляем к объекту с ярлыком... и так пока R16 не станет нулем он нас не отпустит дальше...
dec Temp2 ;вычисляет из регистра(R17) единицу...
brne Loop ;И вот тут та я и зарылся,т.к. R17 не равен нулю он отправляет ход программы на метку Loop,которая заново вычитает из R16 единицу и заново обрабатывает Temp1 ,но из-за этого я подумал что он(цикл) бесконечный,только вот одно Но,ведь первый раз из Temp2 вычли единицу,значит когда Temp1 снова станет Нулем,из Temp2 (R17) вычитается еще единица,и так до нуля
(извините за флуд,просто когда вникаешь в суть,охота со всеми поделиться
мне оказалось не хватало ресурсов для понимания,а именно...
Пошла программа...
...
ldi Temp1 ,0 ;сказали регистру(R16),что он "Ноль" и пошли дальше...
ldi Temp2 ,13 ;тут мы открыли регистру(R17) что его цена 13...
Loop: dec Temp1 ;вешаем ярлык на объект,который заставляет идти нас этой дорогой...dec вычисляет из регистра(R16) единицу...
brne Loop ;проверяет регистр(R16) на нуль,и если он не нуль,то отправляем к объекту с ярлыком... и так пока R16 не станет нулем он нас не отпустит дальше...
dec Temp2 ;вычисляет из регистра(R17) единицу...
brne Loop ;И вот тут та я и зарылся,т.к. R17 не равен нулю он отправляет ход программы на метку Loop,которая заново вычитает из R16 единицу и заново обрабатывает Temp1 ,но из-за этого я подумал что он(цикл) бесконечный,только вот одно Но,ведь первый раз из Temp2 вычли единицу,значит когда Temp1 снова станет Нулем,из Temp2 (R17) вычитается еще единица,и так до нуля
(извините за флуд,просто когда вникаешь в суть,охота со всеми поделиться
- Ka3ax
- Родился
- Сообщения: 18
- Зарегистрирован: Чт фев 07, 2008 14:25:22
- Откуда: от туда
- Контактная информация:
leshiy писал(а):итого,если я правильно уяснил, три цикла в одном
по 256 повторений=> 256*256*256=256^3=16.776.216 ,если тактовая частота около 20 МГц(20.000.000 в секунду) то значит что мигать будут светодиоды чуть быстрее одной секунды,правильно?
насчеь мегагерц не скажу(не знаю как контроллер работает, не знаю с какой скоростью и за сколтко тактов считывает и записывает информацию), а насчет вложенности да.
- Ka3ax
- Родился
- Сообщения: 18
- Зарегистрирован: Чт фев 07, 2008 14:25:22
- Откуда: от туда
- Контактная информация:
Совет по выбору контроллера
Неделю вникал, понял, что пока не начнешь воплощать ничего не поймешь. Посоветуйте контроллер. такой, что бы в Proteus симулировать можно было. И не сильно дорогой.
Задача
заряд-разряд аккумуляторов 1,2 вольта
Заряд отслеживание минус дельта V - изменение с предыдущим
напряжением 20 mV (у кадмиевых 40 mV)на уменьшение.
Накопление статистики о напряжениях,ток если стабильный то просто указывать к каждому снятому показанию напряжения зарядки. идеально с записью на комп. (график построить, что-бы)
Заряд в 4-6 режимах(изменяется длительность и период импульсов зарядки), импульсный, стабильным током , например, период 450 msec, длительность 100m sec.
Можно внешний стабилизатор тока организовать, без обратной связи,
контроллер только будет переключателем режимов зарядки, ток отслеживать не будет.
Разряд
так же импульсным током со сменой периода и длительности
с выбором токов разрядки, например, 100, 500, 1000 mA (стабиолизированные)
разряжать до 1 вольта и до 0,9
считать емкость аккумулятора, сколько внего было влито с 1 го вольта
и сколько вылито с полнозаряженного до 1 вольта.
На первом этапе постараюсь только контроль состояния аккумуляторов организовать, разряд-котроль разрядного тока
и времени.
Наверное все упрется в размер памяти контроллера.
минимум, хотелось бы при зарядке контролировать каждые 15 минут
напряжение зарядки, ток зарядки и Э.Д.С
Но отслеживание минус дельты должно идти, наверное каждую секунду измерение напряжения Э.Д.С
Возможно опытным путем другое время можно определить.
но запоминаться не все значения а нужные для "отлавливания"
минус дельты. (вот зарядку на потом оставляю. думаю, что ума ни сразу не сильно позже реализовать это не хватит)
Реализовать режим зарядки-разрядки с изменением процентого
соотношения зарядного тока к разрядному, как с преобладанием
зарядного, так и разрядного тока.
Контроль температуры каждого заряжаемого элемента.
так же можно другим устройством определять если у контроллера нет возможности.
Если не понятно, могу алгоритм составить,как вижу его, для того
что бы подобрать контроллер точнее.
Задача
заряд-разряд аккумуляторов 1,2 вольта
Заряд отслеживание минус дельта V - изменение с предыдущим
напряжением 20 mV (у кадмиевых 40 mV)на уменьшение.
Накопление статистики о напряжениях,ток если стабильный то просто указывать к каждому снятому показанию напряжения зарядки. идеально с записью на комп. (график построить, что-бы)
Заряд в 4-6 режимах(изменяется длительность и период импульсов зарядки), импульсный, стабильным током , например, период 450 msec, длительность 100m sec.
Можно внешний стабилизатор тока организовать, без обратной связи,
контроллер только будет переключателем режимов зарядки, ток отслеживать не будет.
Разряд
так же импульсным током со сменой периода и длительности
с выбором токов разрядки, например, 100, 500, 1000 mA (стабиолизированные)
разряжать до 1 вольта и до 0,9
считать емкость аккумулятора, сколько внего было влито с 1 го вольта
и сколько вылито с полнозаряженного до 1 вольта.
На первом этапе постараюсь только контроль состояния аккумуляторов организовать, разряд-котроль разрядного тока
и времени.
Наверное все упрется в размер памяти контроллера.
минимум, хотелось бы при зарядке контролировать каждые 15 минут
напряжение зарядки, ток зарядки и Э.Д.С
Но отслеживание минус дельты должно идти, наверное каждую секунду измерение напряжения Э.Д.С
Возможно опытным путем другое время можно определить.
но запоминаться не все значения а нужные для "отлавливания"
минус дельты. (вот зарядку на потом оставляю. думаю, что ума ни сразу не сильно позже реализовать это не хватит)
Реализовать режим зарядки-разрядки с изменением процентого
соотношения зарядного тока к разрядному, как с преобладанием
зарядного, так и разрядного тока.
Контроль температуры каждого заряжаемого элемента.
так же можно другим устройством определять если у контроллера нет возможности.
Если не понятно, могу алгоритм составить,как вижу его, для того
что бы подобрать контроллер точнее.
обязательно ли подключать резистор 10 ком к Vcc как показано на рисунке ?
http://www.lancos.com/siprogsch.html
у меня внутрисхемный лпт программатор
http://www.lancos.com/siprogsch.html
у меня внутрисхемный лпт программатор
- Piroman17
- Грызет канифоль
- Сообщения: 296
- Зарегистрирован: Пт янв 12, 2007 17:16:35
- Откуда: Дубна
- Контактная информация:
столкнулся с тем, что при эмуляции (в протеусе) работы ATmega16 и I2C EEPROM AT24С1024 весь поцесс зависает на команде передачи первого байта
. Код компилировал в CVAVR. вот кусок кода на котором виснет:
Плиз помогите!
Код: Выделить всё
i2c_start();
PORTC = 1;
i2c_write(0b10100000); //вот тут и виснет!
PORTC = 2;
i2c_write(0);
i2c_write(3);
i2c_write(0b101);
i2c_stop();
Плиз помогите!
"Всё новое - хорошо забытое старое" - для творцов без творческий мысли.
Re: Совет по выбору контроллера
слишкам многа букаф... еле асилил... ATMega8 - моделируеццо и недорого, ATMega16 - моделируеццо, аднака дороже, зато многа ног. оба справяццо с задачей элементарноKa3ax писал(а):Посоветуйте контроллер. такой, что бы в Proteus симулировать можно было. И не сильно дорогой.
Покуда есть на свете дураки...удачу мы не выпустим из рук.
- Ka3ax
- Родился
- Сообщения: 18
- Зарегистрирован: Чт фев 07, 2008 14:25:22
- Откуда: от туда
- Контактная информация:
Re: Совет по выбору контроллера
Базилио писал(а):слишкам многа букаф... еле асилил... ATMega8 - моделируеццо и недорого, ATMega16 - моделируеццо, аднака дороже, зато многа ног. оба справяццо с задачей элементарноKa3ax писал(а):Посоветуйте контроллер. такой, что бы в Proteus симулировать можно было. И не сильно дорогой.
спасибо, посмотрел, не очень дорого
6 евро 8 ки 3 штуки, 9 евро 16-е.
пошел изучать цапы.
- Krik99
- Потрогал лапой паяльник
- Сообщения: 375
- Зарегистрирован: Вс мар 04, 2007 13:14:25
- Откуда: Украина
- Контактная информация:
Piroman17 писал(а):столкнулся с тем, что при эмуляции (в протеусе) работы ATmega16 и I2C EEPROM AT24С1024 весь поцесс зависает на команде передачи первого байта. Код компилировал в CVAVR. вот кусок кода на котором виснет:
Код: Выделить всё
i2c_start();
PORTC = 1;
i2c_write(0b10100000); //вот тут и виснет!
PORTC = 2;
i2c_write(0);
i2c_write(3);
i2c_write(0b101);
i2c_stop();
Плиз помогите!
Вот тоже недавно ришил поигратся с i2c, а точнее с EEPROM 24С04. Я вот тоже эмулировал в Протеусе, и никаких результатов, а вот подключил к ATtiny13 , загнал прошивку, и всё ОК. Попробуй на железе, а вобще смотри в HELP , там есть пример работы с EEPROM
И попробуй в Протеусе вместо EEPROM подключить i2c DEBUGGER , вот и увидеш что он передаёт.

- knyaz*
- Грызет канифоль
- Сообщения: 255
- Зарегистрирован: Пн фев 11, 2008 20:32:45
- Откуда: Краснодарский край
Суть заключается в том что есть компилятор gcc стандартная тузла в linux...
Взяты библиотеки из winAVR... там вроде тот же компилятор используется...
Ну жно скомпилировать программу написанную на языке С с помощью gcc...
т.е. какой клучь нужно установить gcc что бы он на выходе дал *.HEX или хотябы бинарник.....
Взяты библиотеки из winAVR... там вроде тот же компилятор используется...
Ну жно скомпилировать программу написанную на языке С с помощью gcc...
т.е. какой клучь нужно установить gcc что бы он на выходе дал *.HEX или хотябы бинарник.....
knyaz* писал(а):Суть заключается в том что есть компилятор gcc стандартная тузла в linux...
Взяты библиотеки из winAVR... там вроде тот же компилятор используется...
Ну жно скомпилировать программу написанную на языке С с помощью gcc...
т.е. какой клучь нужно установить gcc что бы он на выходе дал *.HEX или хотябы бинарник.....
Надо поставить пакеты avr-gcc и avr-libc, ну а там уже команда avr-gcc --help выдаст нужные параметры. Лучше поставь пакет Kontrollerlab и не мучайся с командами(хотя конечно изучить их не помешает)