Jump to content
Duhas

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

Recommended Posts

Какую Вы хотите библиотеку создать ? Объясните, что она по Вашему должна делать, какие функции выполнять, и т.д... ?

Мне вот, например, совершенно не понятно её назначение. Я всегда затачиваю дин. индикацию конкретно под свою задачу.

Share this post


Link to post
Share on other sites

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

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

А библиотеку сделать стоит, ведь делают библиотеки для ЖК
У знакосинтезирующих ЖК-индикаторов свой стандартный контроллер со своим интерфейсом. Меньше разнообразия. Но и там обычно вывод чисел не реализован - только строк.

Share this post


Link to post
Share on other sites

Хорошо. Не хотите, как хотите, я так понял рассуждение про высокие материи и кому, что надо интереснее.

Короче может кому сгодится тут много всяких библиотек, в том числе и для 7-ми сегментного индикатора: http://chipenable.ru/index.php/programming-avr/item/206-biblioteka-dlya-semisegmentnogo-indikatora-s-proizvolnym-podklyucheniem-vyvodov.html там парняга не рассуждает, а просто делает, я хотел сделать, что-то подобное, но менее навороченное, может, короче, ладно.

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

Хорошо. Не хотите, как хотите
[деже не знаю, какой смайл сюда вставть... Больше подходит как на коте, который лоб закрывает рукой]...

Вам задали вопросы :

Какую Вы хотите библиотеку создать ? Объясните, что она по Вашему должна делать, какие функции выполнять, и т.д... ?

А Вы знай своё твердите - библиотека, библиотека, ... хочу сделать, хочу библиотеку...

Ответьте всё-таки на вопросы. Мне действительно интересно.

А то получает, что Вы хотите то, сами не знаю чего. Вы, похоже, просто тащитесь от слова "библиотека". Вас больше ничего не интересует кроме библиотек.

Многие быдлокодеры, в отличии от специалистов, при задаче "Поднять какой-нибудь протокол с каким-нибудь датчиком", начинают гуглить фразу "библиотека для датчика xxxxx", в отличие от спеца, который гуглит "datasheet на xxxx".

Вот и Вы также помешаны на "библиотеках", сами не понимая, что хотите от них. Вам самое главное, чтобы это была библиотека, и пофиг какая она должна быть...

Короче может кому сгодится тут много всяких библиотек, в том числе и для 7-ми сегментного индикатора: http://chipenable.ru...em-vyvodov.html там парняга не рассуждает, а просто делает

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

Share this post


Link to post
Share on other sites

Я пришел просить пример кода на С, где на Atmega8, реализован аппаратный ШИМ и АЦП. Не могу я их подружить jmz6jy6r5.gif . Вот :umnik2:

Edited by si4karuk

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

А что их дружить? )))

взял прикрутил к ножкам обвязку , написал код , и вуаля )

Share this post


Link to post
Share on other sites

Писал я :spiteful:. Никудышный из меня писака. Вот бы подсмотреть кусок реализации

Share this post


Link to post
Share on other sites

да что смотреть ) найди в даташите соответствующие регистры - и управляй!

Share this post


Link to post
Share on other sites

Ага... А то я не знал типа, что есть даташит... Включаю Ацп - работает, включаю ШИМ и он работает. Включаю их вместе, жуть кошмарная, вись и бред.

Я просто думал, может тут обитает экстрасенс, он то мне точно помог БЫ

Edited by si4karuk

Share this post


Link to post
Share on other sites

в каком режиме работает АЦП? как их вместе включаешь? Код покажи .

ща поищу в своих проектах , если найду - покажу как я делал.

Share this post


Link to post
Share on other sites

Я свой код не покажу :unsure: мне стыдно что я такой олух... А как пишут другие, я хочу посмотреть

Share this post


Link to post
Share on other sites

Нашел проект где использовал и то и другое сразу (Atmega328):

// PWM OUT
#define out_pwm OCR1AL

//******** ADC ******************//
#define ADC_VREF_TYPE 0x20
volatile unsigned char timer_adc, adc_data;
#define FIRST_ADC_INPUT 7
#define LAST_ADC_INPUT 7
//*******************************//


// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// конфигурация АЦП

DIDR0=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA7;
ADCSRB&=0xF8;

// ШИМ
TCCR1A=0x81;
TCCR1B=0x0B; // A
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// вызов

adc_data = read_adc(7);

out_pwm = pwm1 + pwm1; // вываливаем значение на выход

В результате , все отлично пашет!

Share this post


Link to post
Share on other sites

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

У меня тоже что то похожее.

Может глюк из за того что ацп постоянное преобразование?? с постоянным выводом на показометр. Хотя... А может та куча ифов мешает

Спасибо

Edited by si4karuk

Share this post


Link to post
Share on other sites

ну так а зачем постоянно преобразовывать? Можно просто периодически "опрашивать" АЦП и выводить данные на экран .

Share this post


Link to post
Share on other sites

народ выручайте

собсно суть проблемы:

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

пример:

aaa == 11000011

чтото делаем и получаем

aaa == 11000011 11000011

если по русски то как в переменную добавить байт не складывая его со значением переменной а размещая его как младший байт?

все это дело нужно на Си

заранее спасибо

Edited by Viktor26

Share this post


Link to post
Share on other sites

В байт ты никак не добавишь еще один байт. У тебя изначально переменная должна быть словом, как минимум.

Share this post


Link to post
Share on other sites

я наверное вопрос не доконца сформулировал.

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

Share this post


Link to post
Share on other sites

Копированием младшего байта в старший. На ассемблере числа больше байта редкость и все знают что с ними делать, на Си с это получается автоматом.

Share this post


Link to post
Share on other sites

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

Если вы хотите сделать операцию сдвига int переменной побайтно, т.е. младший байт int a сделать старшим, а вместо младшего записать старший байт int b, то можно так:

int a, b;			
a=(a&0xff)*256+b/256;

Но если сделать побитный сдвиг через ассемблер, то получится намного быстрее и менее объемно.

Edited by Sergey-Ufa

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By Вячеслав_НС
      Здравствуйте ! подскажите , какую лучше библиотеку использовать (и где ее взять) для управления i2c atmega8 в atmel studio 7  .  задача - управлять atmega8 по i2c ,  цап  PCF8591T .
      понимаю , в интернете много примеров и библиотек , но хотелось бы пример максимально простой и точно рабочий . т.к. пока что все мои попытки не привели к успеху ... то Atmel Studio 7 при компиляции ругается на несуществующий файл ( к примеру - "stream.h") при использовании библиотеки i2c , то еще какие то грабли .
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
  • Сообщения

    • Видимо потому, что на вкладыши он играет лучше многих других.
    • Привет всем, подскажите пожалуйста качественный и малошумящий темброблок для ланзара. Буду очень благодарен вам. 
    • В этих телах звук не отдельно а встроен в SoC цп, им же и управляется "интеллектуально"-  видит импеданс нагрузки  и в зависимости от его значения согласно внутреннего протокола разрешать/запрещать работу умзч. Например выделенный аудиочип Sabrе9218 с усилком делает тоже самое но без участия цп. Этот чип имеет мощный усилитель  классаG и работает на нагрузку до 300ом. А в зенфоне м1 ZB602 усилитель слабее. Но почему то по рейтингам мурзилок входит в топ10 музыкальных смартов.
    • Вот это новости. А MOSFET-то и не знает! -Эй MOSFET, ты не знаешь, например, каким извилистым путём родилась схема? -Каким извилистым путём родилась схема - не знаю, я ведь MOSFET, пути не отслеживаю, тем более извилистые, а вот по прочтению всех сообщений в теме точно знаю, что диоды на нагрев MOSFETа влияют. Вы не знали, что транзисторы усиливают ток? Ваше незнание не помешало Вам вынести оценку. Как так?  Будьте добры, объясните что Вас повеселило?
    • Нетушки! Первое, что следует сделать - это найти причину перегрева. И это будет не режим! Устраняем причину, ставим новый резистор и...радуемся жизни
  • Покупай!

×
×
  • Create New...