roboforum.ru

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

 

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

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

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

Сообщение avr123.nm.ru » 29 сен 2008, 10:25

Doniak писал(а):
// вычислить остаток от деления нацело
я понимаю как просто найти остаток

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

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

Сообщение Doniak » 29 сен 2008, 18:19

avr123.nm.ru писал(а):
Doniak писал(а): я понимаю как просто найти остаток

так и есть.

0.586206897 - это и есть ОСТАТОК !

ну тогда почему 75%29 дают 17, а не 586206897 (0.586206897) ?
Аватара пользователя
Doniak
 
Сообщения: 142
Зарегистрирован: 26 сен 2007, 08:25
Откуда: Krivoy Rog, ukraina
прог. языки: Си
ФИО: Коля

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

Сообщение Digit » 29 сен 2008, 19:06

потому что остаток от деления - это не цифры после запятой! В словарик загляни!
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

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

Сообщение itor » 14 окт 2008, 09:08

Вот вопрос:
Есть две переменные alr1 и alr2 типа bit (0 или 1) как сделать так чтобы когда одна из них или обе снаовятся равными 1 выполнялся какойто код. пытался вот так:

Код: Выделить всёРазвернуть
if (alr1|alr2)
       {
       PORTA.2=1; //код когда alr1 или alr2 (или обе сразу) равны 1
       }
       else     
       {
        PORTA.2=0; //код когда alr1 и alr2  равны 0
         };   


не получилось
Аватара пользователя
itor
 
Сообщения: 8
Зарегистрирован: 24 сен 2008, 03:17
Откуда: Хабаровск

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

Сообщение avr123.nm.ru » 14 окт 2008, 09:23

Почитай - http://avr123.nm.ru/05.htm "Си для МК"

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

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

Сообщение Ostile » 16 окт 2008, 00:24

avr123.nm.ru писал(а):Краткий курс по AVR - самоучитель:
http://avr123.nm.ru   - там же книги и проекты.

Резервные адреса курса:    http://pid.by.ru   и   http://proAVR.narod.ru

Архив с Кратким курсом по AVR всегда достуен по адресу :
http://avr123.nm.ru/avr123.nm.ru.rar   ( примерно 4 Мб )

FAQ  по  AVR, PIC, ARM, CVAVR, WinAVR, IAR, ICC, Keil, GCC и Си для МК + инструментарий разработчика
http://avr123.nm.ru/AVRFAQ.rar  

Книг очень много - лучшие книги скачайте :
viewforum.htm?f=19     ЧИТАЙТЕ !

Архив скачать : Весь краткий курс по AVR + FAQ AVR + симулятор VMLAB - всё что нужно для БЫСТРОГО старта.

=========================

Что-то не открываются страницы кроме первой
Скачайте !!! Рекомендую.
=========================

Волшебный ! Шаблон для быстрого написания программ в CodeVisionAVR ( CVAVR ) для ATmega8 и ATmega16 и мгновенной проверке в симуляторе VMLAB или в PROTEUS. В шаблоне проекты уже сконфигурированы и он легко адаптируется на другие МК AVR.

Посмотрите пример использования шаблона :
viewtopic.php?f=2&t=3958&p=52604#p5260

Все о прошивании AVR, о программаторах, адаптерах и про фьюзы и про загрузчики.

Устройство микроконтроллера AVR - основные моменты для начинающего.

Прерывания в AVR с примерами для быстрого запуска.

Си для микроконтроллеров. Он-лайн книга на русском -Язык программирования Си - Брайан В. Керниган, Деннис М. Ритчи.

13 примеров - задачи-упражнения для освоения программирования AVR.

============
CVAVR 2.03.4 без коклюша и ветрянки !
http://kazus.ru/forum/topic_11456-160.html

CodeVisionAVR v1.25.9 с лекарством

CodeVisionAVR 1.25.8 полную версию можно загрузить
лекарство загрузить
============

Шаблон-заготовка для быстрого старта CVAVR и VMLAB.

VMLAB - скачайте провереный RAR архив.

PROTEUS - мощнейший симулятор - краткий курс и скачать симулятор.
============

Друзья !  Продумывайте функции САМОДИАГНОСТИКИ тех
устройств что делаете. Чтоб требовался минимум инструментов
для поиска неисправностей.
Пример - avr123.nm.ru/z4.htm

Даже простой светодиод может разным режимом
мигания выдать кучу сообщений.

======
Предлагаю в этом топике задавать вопросы по МК не требующие создания отдельного топика.
Концентрировать таким образом информацию по МК.

====== Внимание !  в Тини  и новых мега выше 128  и мега USB CAN PWM Запись

PINx.y = 1; // меняет бит PORTx.y  - инвертирует.

Это позволяет "дергать" ногой с частотой такта (кварца например) !
На странице  avr123.nm.ru/02.htm - на желтом фоне - перечислены некоторые модели AVR
у которых это ДА и у которых НЕТ.

======= ВАЖНО !!!
правила проектирования электроники и плат
http://www.atmel.com/dyn/resources/prod ... oc4279.pdf
http://atmel.com/dyn/resources/prod_doc ... oc1619.pdf
http://atmel.com/dyn/resources/prod_doc ... oc2521.pdf

====== Описание изготовления печатных плат в домашних условиях - ЛУТ дорожки от 0.12 мм УВЕРЕННО !
http://avr123.nm.ru/06.htm

====== Как паять правильно
http://www.sparkfun.com/commerce/presen ... ringBasics
http://www.sparkfun.com/commerce/presen ... DSoldering
Аватара пользователя
Ostile
 
Сообщения: 12
Зарегистрирован: 05 окт 2008, 22:50
Откуда: Ульяновск
прог. языки: CVAVR

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

Сообщение itor » 22 окт 2008, 09:57

Как в Си работать со строками? Не могу понять :x блин.
Задача такая в ATmega16 по ком порту передаю строку "LED1ON" результат загарается светодиод, если "LED1OFF" светодиод гаснет
Дайте ктонибудь пример рабочиего кода чтонибудь похожее если есть. Или не похожее но со строками и попроще :)
Аватара пользователя
itor
 
Сообщения: 8
Зарегистрирован: 24 сен 2008, 03:17
Откуда: Хабаровск

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

Сообщение avr123.nm.ru » 22 окт 2008, 10:11

itor писал(а):Как в Си работать со строками? Не могу понять :x блин.
Задача такая в ATmega16 по ком порту передаю строку "LED1ON" результат загарается светодиод, если "LED1OFF" светодиод гаснет
Дайте ктонибудь пример рабочиего кода чтонибудь похожее если есть.


Смотрите задачу 5 моего курса - http://avr123.nm.ru/z5.htm - там данные поступающие на UART направляются в буфер, далее вам надо брать из буфера символы и в зависимости от того что там - делать то что нужно. Нескольок последовательный конструкций If else - http://avr123.nm.ru/05.htm

Прием команд для контроллера 8 SERVO сервоприводов есть и в исходниках к задаче 13 - http://avr123.nm.ru/z13.htm

=============
Пример "парсинга"-разбора команд есть в PROTEUS в папке SAMPLES\VSM MPLAB Viewer\App Notes\AN696
Это апноут AN696 микрочип - но код на Си ! в прицепе кусочек.
Вложения
разбора команд UART в PROTEUS.txt
(3.66 КиБ) Скачиваний: 48
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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

Сообщение Сергей » 22 окт 2008, 11:41

Вот я не понимаю, зачем учиться писать допустим на Си и обязательно в связке с МК, чтобы еще сложней было? Возьмите Керниган и Ритчи и на ПК научитесь!
Сергей
 
Сообщения: 3741
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение boez » 22 окт 2008, 20:18

Совершенно согласен с предыдущим оратором :)

И более того - очень часто программы для МК пишу так, чтобы они компилились и запускались на компе. Для этого делается простенький HAL (Hardware Abstraction Layer) на макросах. Например:

Код: Выделить всёРазвернуть
#define hal_led1_on() (PORTC &= ~0x08)
#define hal_led1_off() (PORTC |= 0x08)

#define hal_is_btn1_pressed() (PINB & 0x04)


И потом в проге везде пишем конструкции вида:

Код: Выделить всёРазвернуть
if (hal_is_btn1_pressed())
  hal_led1_on()
else
  hal_led1_off()


Ну в общем думаю смысл понятен. Макросы выносим в hal.h, а для винды пишем свой hal.h, в котором вписываем нужные действия - в зависимости от того что за прога, сообщения там на консоль валим или к каким-то кнопочкам-лампочкам в ГУИ привязываем. Для гуи кстати наша прога должна работать в отдельном потоке, чтоб не тормозило.

И все. Отладка на железе упрощается на порядок, потому что при достаточной сложности софта большая часть багов - чисто софтовые и на эмуляции вылезают и фиксятся. А перекомпилировать и запустить прогу на компе занимает несколько секунд, в отличие от перепрошивки контролера. Плюс иногда удобно работать не в реальном времени, тогда пятиминутный тест проги (какого-нить ПИ-регулятора) можно уложить в секунды. Но для таких задач одними кнопочками в гуях не обойдешься, надо писать эмуляцию регулируемой системы...

Мда, это я уже полез в материи, полезные для тех, кто программировать уже умеет :)

Добавлено спустя 3 минуты 30 секунд:
А - самую главную полезность забыл - на компе есть ОТЛАДЧИК!!! Можно точки останова ставить и переменные смотреть. На атмеге8 это намного сложнее :)
boez
 
Сообщения: 1974
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

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

Сообщение avr123.nm.ru » 22 окт 2008, 20:28

boez писал(а): самую главную полезность забыл - на компе есть ОТЛАДЧИК!!! Можно точки останова ставить и переменные смотреть. На атмеге8 это намного сложнее :)

Дак симуляторы ж есть. PROTEUS, VMLAB, MPLAB, AVRstudio, KEIL симулятор
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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

Сообщение TrashVigor » 30 окт 2008, 18:24

Не могу разобраться с захватом таймера1. Я так понял, чтобы захват заработал, нужно сконфигурировать сответствующую ногу МК под захват. Принцип работы так понял таков, что если на ногу ICP1(PBO для меги8) подается напряжение, то происходит прерывание. В ICR1- запоминается состояние TCNT1. но в ICR1 только 0
GIRUGAMESH!
Аватара пользователя
TrashVigor
 
Сообщения: 134
Зарегистрирован: 11 июл 2008, 22:43
Откуда: Воронежск
прог. языки: С, Delphi, Asm

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

Сообщение avr123.nm.ru » 30 окт 2008, 20:44

TrashVigor писал(а): В ICR1- запоминается состояние TCNT1. но в ICR1 только 0

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

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

Сообщение TrashVigor » 30 окт 2008, 21:25

Вот проверить хотел прерывание по захвату. Прерывания проходят каждые ~120мс. Происходят сами собой.
В CVAVR выбирал mode PH correct PWM top=ICR1;
:(
Код: Выделить всёРазвернуть
Chip type           : ATmega8
Program type        : Application
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega8.h>
#asm
   .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <stdio.h>     
char bs[10];

int x;

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
x=x+1;
PORTC^=0x01;
}

// Declare your global variables here

void main(void)
{


// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x01;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x02;
TCCR1B=0x52;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0xFF;
OCR1AL=0xFF;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x20;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
// Global enable interrupts
#asm("sei")
lcd_init(16);
while (1)
      {

      lcd_gotoxy(5,1);
      lcd_putsf("Hello");
     sprintf(bs,"x=%i",x);
          lcd_gotoxy(0,0);               
          lcd_puts(bs);

      };
}
Последний раз редактировалось TrashVigor 30 окт 2008, 22:15, всего редактировалось 1 раз.
GIRUGAMESH!
Аватара пользователя
TrashVigor
 
Сообщения: 134
Зарегистрирован: 11 июл 2008, 22:43
Откуда: Воронежск
прог. языки: С, Delphi, Asm

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

Сообщение avr123.nm.ru » 30 окт 2008, 22:13

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

Пред.След.

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

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

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

Mail.ru counter