Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Kots
Грызет канифоль
Сообщения: 291
Зарегистрирован: Сб июл 18, 2009 23:45:11
Откуда: Мос.обл.

Сообщение Kots »

smac писал(а):
Kots писал(а):Делаю AVR910, но неоказалось резисторов на 100ом. Есть на 111, такой подойдёт?

Число 111 - это Вы на корпусе SMD резистора прочитали? Если да, то это не 111 Ом, а 110. В любом случае, и 110 и 111 Ом подойдет.


:) Прецензионная выводная металлоплёнка из ряда Е192. За ответ спасибо! :beer:
Сендвич всегда падает хлебом вниз.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

из ряда Е192

имеет 4-е цифры в маркировке
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Kots
Грызет канифоль
Сообщения: 291
Зарегистрирован: Сб июл 18, 2009 23:45:11
Откуда: Мос.обл.

Сообщение Kots »

GP1 писал(а):
из ряда Е192

имеет 4-е цифры в маркировке


Даже старая советская? :)
Сендвич всегда падает хлебом вниз.
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

У атмелов (не у всех) именно для таких целей предусмотрен режим повышенной мощности тактового генератора, есть ли такой режим у ПИКа или любого другого конкретного м/к нужно смотреть в ДШ.
dymon
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пн сен 07, 2009 18:49:16

Сообщение dymon »

Есть маленький вопрос. Начал разбираться с USART (Mega 16). В даташите написано, что он может работать в режиме многопроцессорной связи (достигается путем установки MPCM =1 в UCSRA). Не понятно одно - где хранится адерес контроллера, с котым он будет сравнивать принятый от внешнего устройства адрес??? Должен же быть какой нибудь адресный регистр.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

dymon писал(а):... Не понятно одно - где хранится адерес контроллера, с котым он будет сравнивать принятый от внешнего устройства адрес??? Должен же быть какой нибудь адресный регистр.

Адрес контроллера и прочую логику пользователь должен реализовать сам, программно.
den1988
Родился
Сообщения: 1
Зарегистрирован: Сб окт 24, 2009 16:52:56

Сообщение den1988 »

Вобщем, учусь по книге Ревич "Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера"... Немного не понятно с арифметической частью, а именно действия над 16, 24... разрядными числами. Везде даются ссылки на аппноут, но не понятно в двойне...
Начнем со солжения:
-в Ревиче был приведен пример сложения двух 16р чисел:
" add RL1, RL2 ; мл. байты слагаемых
adc RH1, RH2 ; старшие, при условии... "

Пытался реализовать в АВР Студио: (запись вкратце)

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

 
               .equ a={любое число}
               .equ b={любое число}

               .def main1=R13
          .def main2=R14
               .def temp1=R15
               .def temp2=R16
               .def temp3=R17
               .def temp4=R18
           
{регитсры R15:R16 - будут служить для записи числа а,
 регитсры R17:R18 - b}

               ldi main1, a
               ldi temp1, low(main1)
               ldi temp2, high(main1)

               ldi main2, a
               ldi temp3, low(main2)
               ldi temp4, high(main2)


             add temp1, temp3
             adc temp2, temp4

{Результат записывается в регистр temp1:temp2}



В итоге у меня куча эррорс. Что не так
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

den1988 писал(а):...
В итоге у меня куча эррорс. Что не так

Дык какие ошибки-то? Дословно приведите.
Вообще сразу бросилось в глаза ldi main1, a - загрузить число напрямую в регистр, можно только начиная с r16 и ниже, с верхними регистрами команда ldi не работает.
ldi temp2, high(main1) - бессмыслица, с точки зрения ассмблера это эквивалентно ldi r16, high(r15), r15 - регистр а не число (хотя допускаю, что есть числовое определение r15). С помощью команды ldi можно загрузить только число в регистр, для пересылки между регистрами следует использовать команду mov.

В-общем читайте документ AVR Instruction Set, который без труда можно найти на сайте http://www.atmel.com
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Сообщение SII »

den1988 писал(а):

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

 
               .equ a={любое число}
               .equ b={любое число}

               .def main1=R13
          .def main2=R14
               .def temp1=R15
               .def temp2=R16
               .def temp3=R17
               .def temp4=R18
           
               ldi temp1, low(main1)
               ldi temp2, high(main1)

               ldi temp3, low(main2)
               ldi temp4, high(main2)



main1 и main2 определены как регистры (R13 и R14), поэтому к ним неприменимы операции LOW и HIGH -- эти операции возвращают соответственно младший и старший байты константы, а регистр константой не является. Ну и, как выше писалось, нельзя с помощью ldi загружать значения в регистры ниже R16.
Аватара пользователя
-=MindHunteR=-
Открыл глаза
Сообщения: 62
Зарегистрирован: Пн мар 23, 2009 16:20:56
Откуда: From the Middle of Nowhere
Контактная информация:

Глюки COM

Сообщение -=MindHunteR=- »

Ребят, подскажите что может быть причиной тому, что микропроцессор сыплет в терминал кучу мусора? Скорости проверены - код для этого сгенерировал CVAVR2 сам, я ничего не трогал. Скорость процессора тоже проверил - все как надо, но в терминал выводятся тонны непонятной ахинеи, среди которой изредка проскакивает нужная информация...
Я думал это какие-то наводки - укоротил провода до нескольких сантиметров - не помогло...
Что можно сделать? Что это может быть?
Спасибо.
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

А текст программы и схему подключения?
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
-=MindHunteR=-
Открыл глаза
Сообщения: 62
Зарегистрирован: Пн мар 23, 2009 16:20:56
Откуда: From the Middle of Nowhere
Контактная информация:

Сообщение -=MindHunteR=- »

*связь глюканула, сорри*
Последний раз редактировалось -=MindHunteR=- Вс окт 25, 2009 16:48:19, всего редактировалось 1 раз.
Аватара пользователя
-=MindHunteR=-
Открыл глаза
Сообщения: 62
Зарегистрирован: Пн мар 23, 2009 16:20:56
Откуда: From the Middle of Nowhere
Контактная информация:

Сообщение -=MindHunteR=- »

Подключение:

Изображение


Прога:

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

#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>

#define F_CPU 8000000UL  // 8 MHz
#define BAUD_RATE 9600


void adcinit();
int getadc(uint8_t channel);


int uart_putchar (char c)
{
  if (c == '\n')
    uart_putchar('\r');

  loop_until_bit_is_set(UCSRA, UDRE);

  UDR = c;
  return (0);
}

void UART_Init (void) {
  //Enable TXEN im Register UCR TX-Data Enable
  UCSRB=(1 << TXEN);

  UBRRL=(F_CPU / (BAUD_RATE * 16L) - 1);

  fdevopen (uart_putchar, NULL);
}

int main (void)
 {
  adcinit();
  UART_Init();

  DDRC  = 0b00000000;

  DDRB  = 0b00000000;
  PORTB = 0b00000000;

  DDRD  = 0b11100000;  // 1=Output, 0=Input


  PORTD = 0b11100000;  //on

  // пишем в терминал
  printf("ok\n");

  while (1==1) {

    val=getadc(0);
    // тут еще делается работа с переменными - убрал чтоб не мешалась
    // ибо прога пашет супер, только глючит вывод на терминал

    // ну и выводим в терминал
    printf("%d %d %d \n",pwm,pwm_ctr,val);
  }

}

void adcinit() {
  // Activate ADC with Prescaler 16 --> 1Mhz/16 = 62.5kHz
  //ADCSRA = _BV(ADEN) | _BV(ADPS2);
  ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1);
  ADMUX=  0;
}

int getadc(uint8_t channel) {
  // Select pin ADC0 using MUX
  ADMUX = channel | _BV(REFS0) | _BV(REFS1);

  //Start conversion
  ADCSRA |= _BV(ADSC);

  // wait until converstion completed
  while (ADCSRA & _BV(ADSC) ) {}

    // get converted value
  return(ADCW);
}



Жопа в том, что прога и схема не моя - я повторил и видимо у разработчика это работает, потому как терминал он юзал для нивелирования системы..... То есть проблема где-то не в тексте и не в подключении... Но, черт возьми, где-же...?

Большое спасибо!
MaxStoun
Родился
Сообщения: 6
Зарегистрирован: Вс окт 25, 2009 13:10:04

Сообщение MaxStoun »

Подскажите, пожалуйста.
Пытаюсь скомпилировать код в Proteus (targer processor Atmega8, code generation tool AVRSAM2, без флагов)
Пишутся ошибки вида Undefined symbol RAMEND, Undefined symbol SPL
В даташите Atmaga8 не указан цифренный адресс этих констант(может это не так называется)
Подскажите, пожалуйста
1. разве это корректная работа компилятора(что он не может опознать стандартные константы) ?
2. можно как то с помощью Proteus все таки скомпилить эту прогу ?
3. если нельзя с помощью Proteus , подскажите какой нибуть ASM компилятор для Atmega8

Спасибо

.org 0x0000
rjmp start

.org 0x000E
rjmp ADC_ISR


start:
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16

ldi r16, 0xFF
out DDRD, r16

ldi r16, 0
out ADMUX, r16
ldi r16, 0b11101101
out ADCSR, r16

sei

loop:
rjmp loop




ADC_ISR:
push r16
in r16, SREG
push r16
push r17

in r16, ADCL
in r17, ADCH
lsr r17
ror r16
lsr r17
ror r16

com r16
out PortD, r16

pop r17
pop r16
out SREG, r16
pop r16
reti
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

В протеусе код компилировать не приходилось, но точно можно сказать одно: чтобы эти костанты определялись, надо в начале программы подключить файл. Например в VMLab это делается так:

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

.include "D:\vmlab\include\m8def.inc"
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

2 -=MindHunteR=-
Не очень понятно, как осуществлено подключения МК к COM порту. Не уж то на прямую?
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
-=MindHunteR=-
Открыл глаза
Сообщения: 62
Зарегистрирован: Пн мар 23, 2009 16:20:56
Откуда: From the Middle of Nowhere
Контактная информация:

Сообщение -=MindHunteR=- »

Pooher писал(а):2 -=MindHunteR=-
Не очень понятно, как осуществлено подключения МК к COM порту. Не уж то на прямую?

Нет конечно, через преобразователь на MAX232 (он работает номано - замыкал Rx на Tx - ниче не фонит).
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Народ, а какие номиналы нужны для вот такого аналогового обвяза для ШИМ?
Изображение
Имею ввиду номинал конденсатора и резистора. Мне надо для светодиода.
И еще. Когда делают делитель из переменных резисторов для АЦП, какие номиналы брать и по какой схеме подключать?
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Мне надо для светодиода.

Для светодиода интегратор не нужен (при нормальной частоте ШИМ)
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

а для чего нужен ШИМ на отладочной плате?
Не умеешь - не берись, но не взявшись не научишься...
Ответить

Вернуться в «Разные вопросы по МК»