Duhas

Примеры Кода Для Avr

586 сообщений в этой теме

1408    0

Немогу понять, чем в m8def.inc ADCSRА отличаетса от ADCSR?

OUT ADCSR,R16 - значение регистра r16 копируется в регистр ADCSR

а единицы или нули это как Вы в R16 записали.

Я попрробовал прописать так:

OUT ADEN,R16

OUT ADIE,R16

OUT ADSC,R16

и асемблер ето проглотил....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
rtfcnf    1

Немогу понять, чем в m8def.inc ADCSRА отличаетса от ADCSR?

Да ни чем это два псевдонима одного адреса. Зачем не знаю.

Хотя могу предположить, но Вам не стоит пока этим голову забивать.

OUT ADCSR,R16 - значение регистра r16 копируется в регистр ADCSR

а единицы или нули это как Вы в R16 записали.

Я попрробовал прописать так:

OUT ADEN,R16

OUT ADIE,R16

OUT ADSC,R16

и асемблер ето проглотил....

Конечно, проглотит. Ассемблер во время компиляции ошибки находит только на то, что может однозначно проверить типа ошибка синтаксиса, не верные аргументы итд

А вот логику программы извиняйте не может проверить.

А у Вас значение регистра R16 присваивается другим регистрам. Синтаксис правильный, аргументы соответствующие чего бы не откомпилить.

А то, что одно и тоже значение присваивается разным регистрам ему по барабану. Программист написал, значит присвою

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1408    0

Значит мне нада прикинуть последовательность нулей и единиц, перевести её в десятеричній код, а уж потом заносить ЕТО число в R16?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rtfcnf    1
Значит мне нада прикинуть последовательность нулей и единиц, перевести её в десятеричній код, а уж потом заносить ЕТО число в R16?

Вот как Вам надо сделать

Ldi r16, то что нужно в ADEN

OUT ADEN,R16

Ldi r16, то что нужно в ADIE

OUT ADIE,R16

Ldi r16, то что нужно в ADSC

OUT ADSC,R16

Переводить ни чего ни куда не нужно.

Компилятор понимает все представление числа

Пример:

Запишем десятичное число 170 в разных представлениях

В десятичной форме

Ldi r16,170

В шенадцатиричной

Ldi r16,0XAA

В двоичной

Ldi r16,0b10101010

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1408    0

Вопрос НЕ в тему и собласти фантастики: можно ли имея МК, ЖКИ от мобилы, аудио ЦАП и флешку, гдето на 1гб собрать ВИДЕО плеер? ;):rolleyes:

Вопрос по теме:

С етой частью всё ОК:

.include <m8def.inc>

Ldi r16,1

OUT ADEN,r16

Ldi r16,1

OUT ADSC,r16

Ldi r16,0

OUT ADFR,r16

Ldi r16,1

OUT ADIE,r16

А с етой проблема типа Invalid argument of the instruction:

Ldi r16,0

OUT ADSP2,r16

Ldi r16,0

OUT ADSP1,r16

Ldi r16,0

OUT ADSP0,r16

Проверял по примерам, вродибы все правильно, но на практике не работает.....

P.S.

Да, с моими знаниями токо на рынке, рыбой торговать...... <_<

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rtfcnf    1

На вашу строчку OUT ADSP2,r16

Компилятор поругался error: Undefined symbol: ADSP2

Другими словами нет константы с именем ADSP2

Вы словами напишите, какой порт или регистр Вы хотели переслать данные и мы найдем как он называется в файле m8def.inc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1408    0

Если ппавельно понял:

Ldi r16,1

OUT SPH,r16

OUT SPL,r16 ?

Если да то иницыализировал......

ADSP2;ADSP1;ADSP0 - ето три бита вибора частотиы управления

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rtfcnf    1

Ldi r16,low(RAMEND)

OUT SPL,r16

Ldi r16,high(RAMEND)

OUT SPH,r16

Вот инициализация стека

Изменено пользователем rtfcnf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1408    0

Тоисть просто присваиваем разряды (висшый и младшый) куда будут вноситса соответствующие биты адреса.

Я правельно всё понимаю?

А што нащёт ADSP2; ADSP1; ADSP0? В ини файле они так и указываются:

.equ ADPS2 =2

.equ ADPS1 =1

.equ ADPS0 =0 ?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rtfcnf    1

low это макрос который возвращает младший байт(младшие восемь бит) из двухбайтного числа

high это макрос который возвращает старший байт

ADSP2; ADSP1; ADSP0 мнемонические имена битов в регистре. Для битовых операций

http://torrents.ru/forum/viewtopic.php?t=1516662

http://torrents.ru/forum/viewtopic.php?t=1102268

http://torrents.ru/forum/viewtopic.php?t=1019971

http://torrents.ru/forum/viewtopic.php?t=421076

Книги по AVR. Только зарегистрируйтесь на торренсе, что бы скачать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Помогите плиз!

Я изучаю язык Си. Но я застопорился на одном месте, и буксую уже месяц...

Какие команды есть команды для языка Си?

Знаю там delay_ms - задержка...

А какие еще есть?

main void, не понимаю, что это такое...

Вообще какие есть операторы?

заню есть еще такие:

>>, !, #include, но что это такое и как это работает не знаю. Помогите!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rtfcnf    1

void применительно к функции. Функция не возвращает значение

void main() точка входа в Вашу программу

Извеняйте, но отвечаю только на конкретные вопросы. Книжек по основам си в инете полно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tobias    0
Я изучаю язык Си. Но я застопорился на одном месте, и буксую уже месяц...

Какие команды есть команды для языка Си?

Вот для вас как раз написано - с абсолютного нуля растолклвано с примерами "Язык Си для МК"

Там же книги скачать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1408    0

Наверное вы,rtfcnf, всёже станите учителем. :-))

А по поводу етого:

http://torrents.ru/forum/viewtopic.php?t=1516662

http://torrents.ru/forum/viewtopic.php?t=1102268

http://torrents.ru/forum/viewtopic.php?t=1019971

http://torrents.ru/forum/viewtopic.php?t=421076

Я там был, уже заблокировали........

Ну а если в кратце, что нужно сделать?

Изменено пользователем 1408

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lexi    0

Книга Шпака вам поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tobias    0
Книга Шпака вам поможет.

Она точно есть в библиотеке книг по микроконтроллерам и электронике для скачивания и чтения.

Посмотрите там еще и "Микроконтроллеры AVR для начинающих" и другие книги - более новые.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1408    0

Она точно есть в библиотеке книг по микроконтроллерам и электронике для скачивания и чтения.

Посмотрите там еще и "Микроконтроллеры AVR для начинающих" и другие книги - более новые.

У меня куча книг, толку никакого. Нет НИ ОДНОГО НОРМАЛЬНОГО ПОЯСНЕНИЯ !

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rtfcnf    1
Ну а если в кратце, что нужно сделать?

минимальный шаблон для Mega8

.include <m8def.inc>

.def		tmp			= r16;регистр временного хранения


;C нулевого адреса во всей серии Mega размещаеться таблица прерываний
.org 0
		rjmp	INSTAL
		reti		;INT0
		reti		;INT2
		reti		;дальше по мануалу можете заполнить название других прерываний
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
;конец таблицы прерываний (не есть хороший стиль зато понятно)

INSTAL:
		Ldi 	tmp,low(RAMEND)
		OUT 	SPL,tmp
		Ldi 	tmp,high(RAMEND)
		OUT 	SPH,tmp
;далее инициализируем порты и остальную перефирию

MAIN:
;а здесь Ваша нетленка (код программы)

Ваши вопросы

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1408    0

Большое спасибо и прошу прощения за весь етот бред. Просто у нас в городе люди или тупые по етому поводу или сильно умные чтоб обяснить. Сам, как видите, отношусь к тупым, а розобратса надо, не стоко для дела, стоко для самого себя. Електроника шагает вперёд, а я стою на месте..... :angry::(:unsure::huh:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rtfcnf    1
Большое спасибо и прошу прощения за весь етот бред. Просто у нас в городе люди или тупые по етому поводу или сильно умные чтоб обяснить. Сам, как видите, отношусь к тупым, а розобратса надо, не стоко для дела, стоко для самого себя. Електроника шагает вперёд, а я стою на месте..... :angry::(:unsure::huh:

Пока, мне не надоело, спрашивайте.

В наше время и асемблер :lol: удивило.

Сам последний раз на асме года три назад писал если не не больше.

Если есть почтовый ящик и готовы принять мегов 100 книги могу выслать. (не очень быстро так как гдето на cd лежат)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1408    0

За кусок программы спасибо, а чтомне делать то с моей проблемой:

Ldi r16,0

OUT ADSP2,r16

Ldi r16,0

OUT ADSP1,r16

Ldi r16,0

OUT ADSP0,r16

Invalid argument of the instruction ?

По поводу книг, можно и спасибо.

rgnatenco@mail.ru

Изменено пользователем 1408

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rtfcnf    1

Команда OUT первым аргументом принемает АДРЕС РЕГИСТРА, а ADSP0- ADSP2 название битов в регистре.

Посмотрите как я сделал для лучшего понимания и повторите для своего регистра

.include <m8def.inc>

.def		tmp			= r16;регистр временного хранения

;данные для инициализация регистра ADMUX
.equ		ADMUX_INIT1	= 0b00000000;ПОСТАВТЕ ПРАВИЛЬНО БИТЫ мне влом мануал читать
;							  ||||||||____ MUX0 выбор канала
;							  |||||||_____ MUX1 выбор канала
;							  ||||||______ MUX2 выбор канала
;							  |||||_______ MUX4 выбор канала
;							  ||||________ пусто
;							  |||_________ ADLAR выравневание
;							  ||__________ REFS0 источник опорного напряжения
;							  |___________ REFS1 источник опорного напряжения


;C нулевого адреса во всей серии Mega размещаеться таблица прерываний
.org 0
		rjmp	INSTAL
		reti;INT0
		reti;INT2
		reti;дальше по мануалу можете заполнить название других прерываний
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
		reti
;конец таблицы прерываний (не есть хороший стиль зато понятно будет Вам)

INSTAL:
		Ldi 	tmp,low(RAMEND)
		OUT 	SPL,tmp
		Ldi 	tmp,high(RAMEND)
		OUT 	SPH,tmp

;инициализируем регистр ADMUX (канал,выравневание,опорное напряжение)
		ldi		tmp,ADMUX_INIT1
		out		ADMUX,tmp

MAIN:
;а здесь Ваша нетленка (код программы)

Изменено пользователем rtfcnf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1408    0

Вот моя "набранная" часть :

Моя проблема находитса в нозу страницы, чтосетим делать?

А с остальным я вродебы розобрался.

post-66200-1238044337_thumb.png

Изменено пользователем 1408

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
wowa    4

Похоже что у вас или странный или не тот инклуд в начале програмы использован... Выпишите содержимое файла m8def.inc если вы его вообще подключаете... И что за компилятор используете???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это снова я. Вот скачал книги, которые Вы мне дали. Но там не МК программируются, а просто программирование на языке Си. Я изучаю С++.

Но простое программирование на этом языке мне вобщем то не нужно. Нужно только уметь писать программы для AVR МК. Что мне делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: polych
      Здравствуйте.
      У меня возникла проблема в прошивке микроконтроллера Atmega8.
      Задача заключается в том чтобы сравнивалось опорное на напряжение АЦП с подаваемым на вход АЦП напряжением и далее результат выводился на дисплей. У меня возникли сложности с настройкой АЦП, как я думаю оно находится в спящем режим так как когда я загружаю hex файл в Proteus и запускаю пошаговую отладку, то мои условия не выполняются и в переменной в которую я прописываю значение подаваемого напряжения постоянно находится значение опорного напряжения.
      Код пишу в Atmel Studio 6 на С
      Симуляцию делаю в Proteus
      Очень нужна помощь
      Спасибо!
      Примерный код в Atmel,не судите строго только начинаю изучать микроконтроллеры
      #define F_CPU 1000000UL
      #include <avr/io.h>
      #include <avr/interrupt.h>
      #include <util/delay.h>
      static volatile int u = 0;
      static volatile float v;
      int main(void)
      {
       DDRB=0xFF;
       PORTB=0x00;
       DDRC=0x00;
       PORTC=0xFF;
       
       //настройка АЦП//
       ADCSRA |=(1<<ADEN)//включение ацп
       |(1<<ADPS1)|(1<<ADPS0)|(1<<ADFR);//ADPS2-ADPS0-тактовая частота АЦП???
       //ADCRA=0x83
       ADMUX |= (0<<REFS1)|(1<<REFS0)//внешний ИОН
       |(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3); //вход PC0
       //ADMUX=0x00
          while(1)
          {ADCSRA |=(1<<ADSC);//начинаем преобразование
           while ((ADCSRA&(1<<ADIF))==0);//ждём флага окончание преобразование
          _delay_ms(5);
           u=ADCW;// считываем ADC
          
           v = (float) u*0.0048828;
           if (v>=2.1){
            PORTB=0x01;
           }
           else{
            PORTB=0xFF;
           }
           _delay_ms(5);
      Также начальный проект в протеус, опять же не судите строго)
      micro.pdsprj
    • Автор: Dmitry Suhoruk
      Доброй ночи, мне бы не помешала помощь опытных людей. Дело в том что на днях у меня на сабе Genius GHT-s200 пошло замыкание по плате. выключил снял крышку сделал пару фото погуглил, оказалось сгорели ножки на tda7265. но дело в том что на задней стороне платы по ходу перегорела еще и дорожка.. есть опытные люди в этой сфере которые подскажут что куда пхать или на какую плату лучше заменить. ? 



    • Автор: paulb
      Есть задумка собрать вольтметр постоянного напряжения (до 1000В) на ГРИ, использовав за основу популярную схему часов. Либо на базе микросхемы ICL7107, если это возможно. Знающих прошу помочь.
    • Автор: admin
      Сайт Паяльник открывает обучающий видеокурс по AVR-микроконтроллерам.
      В этой теме "обратной связи" будем постепенно добавлять новые видеоролики с нашего канала. Здесь можно задавать вопросы, давать рекомендации, критиковать, оставлять отзывы и пожелания, а также запросы на тему будущих видеоуроков.
      Ведет видеокурс наш форумчанин kobzar.
      Профиль пользователя на сайте cxem.net. Там же финансовые реквизиты для тех, кто пожелает финансово отблагодарить автора данного видеокурса
      Подписка на YouTube канал
      Краткий обзор сред разработки для различных микроконтроллеров на сайте: http://cxem.net/software/soft_mcu.php
      Внимание начинающим! Перед тем, как задавать вопросы не по теме видеоуроков, прочитать:
      Статьи по МК для начинающих
      Книга по программированию микроконтроллеров AVR
      Также, здесь же на форуме рядом с этой темой смотрите прикрепленные темы: для начинающих, по языку Си и т.д. Все вопросы не по видеокурсу задавайте только там. С этой темы подобные вопросы удаляются
      Кракозябры вместо русских букв
      Ребята - спешу сообщить что найден метод борьбы с кракозябрами вместо русских символов, при работе с ЖК. Дело в том, что у некоторых из вас, проект создается в кодировке UTF-8, а наша библиотека работает только с ср1251
      Фикс:
      1.Открываем проект
      2. File - Advanced Save Options
      3. Вместо кодировки UTF-8 выбираем Cyrillic(Windows) - cp1251
      Сохраняем, сохраняем проект - компилируем!
      Добавлено 12.01.16 :
      Изменённые версии библиотеки lcd_5110 :
      От Alex - http://forum.cxem.ne...20#comment-2287906
      От COKPOWEHEU - http://forum.cxem.net/index.php?showtopic=136229&st=1840#comment-2373820
       
  • Сообщения

    • Обычный одновибратор (ждущий мультивибратор) на паре инверторов...
    • Синтепон напихан, это не выход, там объема нужно в два раза больше... А вот тут можно обмозговать... Есть магнит от 75гдн, он из пары блинов, попробовать их разделить, и приклеить по одному на каждый дин. Поксиполом нормально будет?
    •  вот пожалуйста на китайском сайте такие же как у вас только написано Полипропилен
    • 2) в описании ни у каких потенциометров не указана характеристика 3)проходными посчитал с7 ,с10, с20, с22, с24, с26, с29
    • Если сделать по предложенному варианту появляется две проблемы: - уровень входного сигнала звуковух (тех что я видел) в районе 2х вольт rms. На прямую нельзя, необходим делитель на входе. - получается замкнутый контур земли - ток с выхода усилителя по сигнальному проводу идет на нагрузку 4 ома, далее идет по общему проводу  обратно в усилитель - замкнутый контур как и положено, НО общий провод усилителя идет еще на вход звуковой карты, на которой обычно земли входов и выходов соединены и далее общий провод идет на вход усилителя по общему проводу сигнальной цепи, а в усилителе сигнальная земля соединена с  силовым общим проводом (иногда ставят в усилителе 10 ом между сигнальной землей и силовой). в итоге появляется второй контур для протекания тока и распределение токов получится пропорционально сопротивлению проводов силового сигнального от нагрузки и сигнального по описанному контуру. например силовой общий от усилителя к нагрузки имеет сопротивление  при длине 2 метра и сечении 2,5 мм кв примерно 0,02*2/2,5=0,016 ом (). Ток в нем при напряжении на выходе усилителя 14 вольт -  14/4 ом нагрузки=3,5 ампера. Падение напряжения на общем силовом проводе (провод от усилителя к нагрузке 4 ом) =3,5*0,016=0,056 вольта. Это напряжение прикладывается к сигнальному общему проводу, идущему от точки соединения общего силового с нагрузкой 4 ома , через вх/выходной разъем звуковухи, до входа усилителя (и далее к кусочку проводника соединяющего входной общий с общим блока питания или если там установлен резистор 10 ом, то через него). Предположим длина этого провода 2 метра, что получается, пусть провод будет витой парой в экране и минус идет не через экран (он землится в одной точке с одной стороны), а через один из проводов витой пары. Возмем сечение 0,35 мм кв. Сопротивление этого проводника 0,02*2/0,35=0,114 ом. В нем будет течь ток 0,056/0,114=0,49 АМПЕРА. Если экран соединить с двух сторон, сопротивление цепи уменьшится и ток еще больше возрастет. Эти 0,49 ампера создадут падение напряжение на общем сигнальном проводе, которое грубо говоря "пролезет" на сигнальный вход усилителя за счет падения напряжений на участках цепи сигнального общего провода. В таких условиях ни о какой достоверности результатов и речи быть не может. По этой причине необходим балансный вход , т.е. чтобы не было связи по общему проводу между входом и выходом звуковой карты. Другого внешнего цапа у нас нету, поэтому приходится выкручиваться с этим, но есть подозрение, что у него не "все чисто" внутри касательно развязки земли.  
    • Добавить вату в ас,если возможно добавить магнит(приклеить отталкивающей стороной) конешно ачх на средних может изменится
    • Всем привет! Помогите подключить провода на место. Вытяжка Bosch DKE 955 D. На первом фото провода которые нужно подключить, в левой руке от блока кнопок (синий, красный, серый), а в правой от двигателя (красный, коричневый, заземление). Места куда все эти провода подключаются на втором (кабель питания) и третьем (пусковой конденсатор) фото. Буду благодарен, все что больше трех проводков вызывает шок и удивление.