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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
oleg63m
Друг Кота
Сообщения: 20132
Зарегистрирован: Чт сен 01, 2011 12:53:27
Откуда: ТьмуТаракания. Почетный житель подмостовья
Контактная информация:

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

Сообщение oleg63m »

Chettuser писал(а): для какого PIC Вам надо программатор?

Для пиков, как и для Авров, а так-же seeprom, я с успехом использую Экстрапикопреподобный программатор. Тоже, кстати упрощенный по максимуму(в плане стабилизаторов).
с его помощью сделал STK-500 HVPP HVSP-LP программатор. вот сегодня без проблем прошил Pic2550 для Pickit-2,
вчера шил пик16F876, тоже успешно (в одной и той же панельке :)) ). Так что никуда ходить не надо, надо просто включать мозговую косточку :beer:
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

Alexeyslav писал(а):Лучше изначально использовать UART если нужно более менее приличное расстояние передавать.

Но на Уарт много девайсов не навесишь. У меня их намечается штук 20 - придется тянуть 20 хвостов и каким-то образом запихивать их в комп. Шинная архитектура так и просится. Собственно, почему посмотрел на I2C - кто-то юзал его для похожих целей, но там, как я понял, соединение было с помощью шлейфов, т. е. вроде как в пределах блока. А у меня расстояние может быть до нескольких метров.
Можно конечно сгородить самопальный протокол, но не красиво ИМХО. Да и компу будет тяжело ножки порта дергать, если юзать тупо плату цифрового ввода-вывода - проц под 100%, а толку ноль.
Аватара пользователя
oleg63m
Друг Кота
Сообщения: 20132
Зарегистрирован: Чт сен 01, 2011 12:53:27
Откуда: ТьмуТаракания. Почетный житель подмостовья
Контактная информация:

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

Сообщение oleg63m »

aam
а если попробовать использовать приемо-передатчики а ля rs232, без преобразования протокола? до 30 метров по моему тянут
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

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

Сообщение SmarTrunk »

RS-485 вроде как раз для этого, если не ошибаюсь. Там можно вешать много устройств, и существует какой-то протокол, мне неизвестный.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Один из известных мне -- Modbus. Проверен многократным использованием и длительным временем.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Современный UART в контроллерах умеет работать в 9-битном режиме, таким образом разделяя передачу адреса и данных. При этом нет таких жестких ограничений по линии связи как у I2C. Если все правильно организовать, получится ничуть не хуже. Только протокол будет сложнее.
Аватара пользователя
zvukovik
Встал на лапы
Сообщения: 140
Зарегистрирован: Вт авг 03, 2010 15:21:20
Откуда: Екатеринбург

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

Сообщение zvukovik »

не совсем по МК, у кого-нибудь есть опыт программирования мощных процессоров, которые стоят на одноплатниках и SOM? пробовал освоить варисайтовские модули, линукс туда задолбался зашивать и он так и не заработал нормально, поддержка помогать не хочет, реально ли запрограммировать эту штуку как большой МК без линуксов?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Реально. Если у тебя в запасе несколько лет на изучение документации к нему и наработки приемов программирования под него...
Аватара пользователя
zvukovik
Встал на лапы
Сообщения: 140
Зарегистрирован: Вт авг 03, 2010 15:21:20
Откуда: Екатеринбург

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

Сообщение zvukovik »

надо будет попробовать для эксперимента, а его можно в иаре через j-link отлаживать, (у него же есть в списке cortex-A8), или там как-то по другому всё делается?
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

SmarTrunk писал(а):RS-485 вроде как раз для этого, если не ошибаюсь.

Я как-то забыл про то, что 485 может как шина работать, т. е. на 1 провод можно несколько устройств сажать... :oops:
Думаю, самым правильным в таком случае будет взять в качестве физики RS485 и пустить по нему UART. Если честно, про логику 485 тоже ничего не помню, он, как я понял, сейчас в основном как электрический интерфейс воспринимается. А что по нему пустить - дело юзера - хоть ногами дергать :)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

прошу совета
имется код пищалки которая проигрывает элементарные мелодии
Спойлер

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

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define LED_ON PORTC|=(1<<0)
#define LED_OFF PORTC&=~(1<<0)


#define C1 15288
#define C1d 14431
#define D1 13621
#define D1d 12856
#define E1 12134
#define F1 11453
#define F1d 10811
#define G1 10204
#define G1d 9631
#define A1 9090
#define A1d 8580
#define H1 8099
#define C2 7648
#define C2d 7220
#define D2 6814
#define D2d 6430
#define E2 6069
#define F2 5730
#define G2 5102
#define G2d 4815
#define A2 4545
#define A2d 4291
#define H2 4049
#define C3 3822
#define P 0
#define End 1
#define N16 250.000
#define N8 500.000
#define N4 1000.000
#define N2 2000.000
#define N1 4000.000

int tanki[]={160.000,P,N16,C2,N16,D2,N16,D2d,N16,C2,N16,D2,N16,D2d,N16,D2d,N16,F2,N16,G2,N16,D2d,N16,F2,N16,G2,N16,
F2,N16,G2,N16,A2,N16,F2,N16,G2,N16,A2,N16,G2d,N16,A2d,N16,C3,N16,G2d,N16,A2d,N16,C3,N16,C3,N16,P,N16,C3,N16,C3,N16,C3,N16,C3,N16,End}; //мелодия танчиков

int mario[]= {100.000,P,N8,E2,N16,E2,N16,P,N16,E2,N8,P,N16,C2,N16,E2,N16,P,N16,
                G2,N16,P,N16,P,N8,G1,N16,P,N8,P,N8,
                C2,N16,P,N8,G1,N16,P,N8,E1,N8,P,N8,
                P,N16,A1,N16,P,N16,H1,N16,P,N16,A1d,N16,A1,N16,P,N16,
                G1,N16,E2,N16,G2,N16,A2,N16,P,N16,F2,N16,G2,N16,
                P,N16,E2,N16,P,N16,C2,N16,D2,N16,H1,N16,End};   //мелодия марио

int miniPolka[54]={120.000,P,N8,C2,N8,E2,N8,G2,N8,E2,N8,G2,N8,F2,N8,D2,N4,G2,N8,F2,N8,D2,N4,G2,N8,E2,N8,C2,N4,
                C2,N8,E2,N8,G2,N8,E2,N8,A2,N8,G2,N8,F2,N4,G2,N8,F2,N8,E2,N8,D2,N8,C2,N4,End};
int bumer[]={170.000,P,N8,E2,N8,G2,N4,P,N4,P,N4,
             G2,N8,E2,N4,P,N4,P,N4,
             A2,N8,G2,N8,A2,N8,G2,
             N8,A2,N8,G2,N8,A2,N8,G2,N8,A2,N8,H2,N4,P,N4,End};
int nokia[30]={120.000,P,N8,E2,N8,D2,N8,
               F1d,N4,G1d,N4,C2d,N8,H1,N8,
          D1,N4,E1,N4,H1,N8,A1,N8,
          C1d,N4,E1,N4,A1,N4,End};
int mortal[66]={140.000,A1,N8,A1,N8,C2,N8,A1,N8,D2,N8,A1,N8,E2,N8,D2,N8,
               C2,N8,C2,N8,E2,N8,C2,N8,G2,N8,C2,N8,E2,N8,C2,N8,
               G1,N8,G1,N8,H1,N8,G1,N8,C2,N8,G1,N8,D2,N8,C2,N8,
               F1,N8,F1,N8,A1,N8,F1,N8,C2,N8,F1,N8,C2,N8,H1,N8,End};

int *playlist[]={mortal,
                 nokia,
                 miniPolka,
                 bumer,
                 mario,
                 tanki
                 };


volatile int track=0;



volatile int NoteLong = 250;
volatile int loaded=0;
volatile int i = 1;

// прерывание таймера 1
//interrupt [TIM1_COMPA] void timer1_compa_isr(void)
ISR (TIMER1_COMPA_vect)
{
//  PORTD.0=!PORTD.0;
  //PORTC ^= 1;
   PORTC^=(1<<1);
}

volatile int Bit = 0x00;


void play()
{
         OCR1AH = (char)(Bit>>8); //записываем текущую ноту в OCR1A
         OCR1AL = (char)Bit;
         _delay_ms(NoteLong);
//         #asm("cli")              //запрещаем прерывание чтобы оборвать ноту
         cli();
         _delay_ms(40);
//         #asm("sei")
         sei();
         i=i+2;
}
void pause()
{
//         #asm("cli")        //пауза между нотами
   cli();
         _delay_ms(NoteLong);
//         #asm("sei")
         sei();
//         i=i+2;
         i+=2;
}


void stop()
{

//  #asm("cli")
   cli();
  Bit=0x00;
  //PORTC=0x00;
  PORTC&=~(1<<1);
  i=1;
  _delay_ms(200);

  if(track==5)     //если последний, то начать заново
  {
  loaded=1;
  track=0;
  LED_ON;
  _delay_ms(1000);
  LED_OFF;
  }
  else
  {
       track++;

       LED_ON;
       _delay_ms(1000);
       LED_OFF;

  }

}
void Loading_melody()
{
       i=1;
       while(playlist[track][i]!=1)
       {
       playlist[track][i+1]=playlist[track][i+1]/(playlist[track][0]/60.000);
       i++;
          if(playlist[track][i]!=1)
          {
          i++;
          }
       }
       i=1;
}

int main(void)
{

   PORTC=0x00;
   DDRC=0b000000011;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: CTC top=OCR1A
// 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=0x00;
TCCR1B=0x09;
//TCNT1H=0x00;
//TCNT1L=0x00;
//ICR1H=0x00;
//ICR1L=0x00;

//OCR1AH=0x00;
OCR1AL=0xFB;

//OCR1BH=0x00;
//OCR1BL=0x00;

TIMSK=0x10;

LED_ON;
_delay_ms(1000);
LED_OFF;

while (1)
      {

         if(loaded==0)
         {
         Loading_melody();  //пересчет длительности нот
         }

//         #asm("sei")
         sei();


         while(playlist[track][i]!=1)
         {
             Bit= playlist[track][i]; //массив с нотами
             NoteLong=playlist[track][i+1];
             if(Bit==0)
             {
               pause();
             }
             else
             {
              play();
             }
         }

         stop();
         //LED_ON;
      };

}

проблемма в том что проигрывается все время одна мелодия......, опытным путем удалось выяснить что это происходит из-за того что не происходит инкремент переменной track в этом месте

Спойлер

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

void stop()
{

//  #asm("cli")
   cli();
  Bit=0x00;
  //PORTC=0x00;
  PORTC&=~(1<<1);
  i=1;
  _delay_ms(200);

  if(track==5)     //если последний, то начать заново
  {
  loaded=1;
  track=0;
  LED_ON;
  _delay_ms(1000);
  LED_OFF;
  }
  else
  {
       track++;

       LED_ON;
       _delay_ms(1000);
       LED_OFF;

  }


все условия для этого выполнены....., в чем может быть проблемма ???
с оптимизацией игрался но не помогло......, подскажите пожалуйста.
Tell Me The Truth
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Какая то мутная программа. Расплывчато выглядит формат хранения мелодии. Что-то играет, но похоже только до конца песни. Далее производится попытка чтения из области за пределами памяти программ, видать конец мелодии не может определить и проц перезагружается.
Мутно выглядит функция play() почему бы не вызвать ее с параметром вместо того, чтобы читать из глобальной переменной? Аналогично с функцией pause().
Еще непонятно что делает функция load_melody() тоже как то мутно делится сама ячейка и в нее же записывается.
К тому же вызов ее осуществляется похоже постоянно

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

  if(loaded==0)
         {
         Loading_melody();  //пересчет длительности нот
         }
 

по условию, которое не меняется нигде кроме как здесь

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

if(track==5)     //если последний, то начать заново
  {
  loaded=1;<<<----------Тут меняется только если track ==5!!!
  track=0;
  LED_ON;
  _delay_ms(1000);
  LED_OFF;
  }
  else
  
{
       track++;

       LED_ON;
       _delay_ms(1000);
       LED_OFF;

  }  
То есть мелодия считается загруженной, только если track ==5?? :facepalm: ничего не пойму

Может придумать более удобный формат? MP3 например :))) шутка
Типа сделать тип нота

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

typedef struct 
    
{   uint8_t Tone;
         uint8_t lenght;
    }sound_t;

typedef struct {
        uint8_t Lenght;
        sound_t melody[];
}
melody_t;
 

В качестве конца мелодии можно использовать 0x00

Гонял гонял мелодии они не перелистываются просто потому что не происходит определения конца мелодии.
Разберись с этим отрезком:

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

while(playlist[track][i]!=1) <<<----Тут бесконечный цикл в реале выходит
         
{
             
Bitplaylist[track][i]; //массив с нотами
             
NoteLong=playlist[track][i+1]; 
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

вот первоисточник
http://avr-start.ru/?p=476
http://avr-start.ru/?p=730
там код написан под CV......, в этой среде я откомпилил и прошил МК......, все заработало......., но вот когда я попытался перенести код в Eclipse то тогда и началась вся та свистопляска о которой я упоминал выше.
Tell Me The Truth
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

после долгих мучений удалось решить проблемму проигрывания только одной мелодии….., спасибо товарищу Apparatchik……, дело оказалось в переполнении стека
Tell Me The Truth
Аватара пользователя
Евгений33
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн ноя 08, 2010 14:07:14
Откуда: Владимирская область

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

Сообщение Евгений33 »

Возвращаясь к вопросу о тактировании MEGA32 от КХО-97. При программировании по ISP от CHIP PROG -48, нет стабильности считывания данных от контроллера и его программирования (то ошибки, то читает), в момент программирования контроллера питание на кварцевый генератор не подается, тактирование идет от программатора. Если мы перерезаем дорожку соединяющую выход кварцевого генератора со входом XTAL1 все работает очень даже хорошо.
.....
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Евгений33 писал(а):в момент программирования контроллера питание на кварцевый генератор не подается, тактирование идет от программатора

Эээ... А схемотехнически как это выглядит?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Евгений33
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн ноя 08, 2010 14:07:14
Откуда: Владимирская область

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

Сообщение Евгений33 »

Программатор подключается через разъем и запитывает только контроллер (на схеме не показано), а вот генератор без питания, но его выход соединен с контроллером и если эту связь разорвать все начинает работать как надо.

Вроде так
Вложения
1.jpg
схемка
(106.66 КБ) 357 скачиваний
Последний раз редактировалось Gudd-Head Пн июл 01, 2013 14:27:09, всего редактировалось 1 раз.
Причина: 2 сообщения подряд — нарушение п.2.2 Правил Форума
.....
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

И как КХО-97 переносит импульсы на своём выходе при отсутствии питания? Пипец, вы бы хоть резисторами развязали ваши тактовые источники.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Евгений33
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн ноя 08, 2010 14:07:14
Откуда: Владимирская область

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

Сообщение Евгений33 »

Gudd-Head, как я понимаю выход генератора шунтирует сигналы программатора или я ошибаюсь ?
.....
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Правильно понимаете, если в программаторе можно выставить частоту программирования, то можно отключить провод который идет к Xtal программатора. А можно просто поставить джампер на эту линию для программирования с тактированием от программатора.
Ответить

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