Jump to content

Recommended Posts

Guest

Меня тошнит от С из-за его нечитабельности.

аналогично... я думал, что я один такой ))) уж лучше асм!!

Share this post


Link to post
Share on other sites

Я собрал программатор Громова (те же 5 проводков через СОМпорт), прошил мегу8 для usbasp и горя теперь не знаю. И вам того же советую :rolleyes: !

Share this post


Link to post
Share on other sites

Руководство для разработчика приложений на базе STM32WB55

Представив двухъядерные беспроводные микроконтроллеры STM32WB для IoT-приложений, компания STMicroelectronics предлагает разработчикам экосистему, включающую в себя отладочные платы, примеры кода для микроконтроллера, готовое ПО всех уровней и большой массив документации.

Читать статью

Guest

у меня от COM порт он ни на одном из компов не заработал.. а от LPT - лет 6 пользовался! пока сначала на usb Протосс не собрал, а потом купил usbasp

Share this post


Link to post
Share on other sites

Пришлось Пентиум 2 доставать с чердака! Раритет однако! Но прошил!

Edited by chip-chip

Share this post


Link to post
Share on other sites
                     

Контроль в спящем режиме: повышение КПД батарейного питания с помощью DC/DC MAX17225 nanoPower

В статье описан практический опыт разработчика, применившего повышающий DC/DC-преобразователь MAX17225. В результате ряда практических экспериментов, потребовавших существенного обновления технической базы компании-разработчика, автор убедительно доказывает преимущества выбранного компонента и схемотехнической реализации. Увеличенное на 50% время автономной работы лучше других аргументов говорит об эффективности конвертеров MAX17225, а также о важности предварительной оценки элементной базы.

Подробнее

Порой для этих целей проще использовать ардуинку как многофункциональное программируемое цифровое устройство, которым можно дергать ножками, а ножек у них бывает довольно много. Почему-то я уверен что под нее есть много примеров для программирования множества микросхем - и AVR и ПИКов, и 24Cxx и флеш и т.д.

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

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

void adc_init(void)//инициализация ацп
{
ADCSRA = 0x00;//
ADMUX = 0x4F;//вход 1.22 вольта(встроено), опорное 2.56 в.
ACSR  = 0x80;//выключить компаратор
ADCSRA = 0x86;//включить ацп, предделитель 1/64
}

void Readadc(void)//читаю ацп
{
ADMUX = 0x4F;// то же
ADCSRA |= 1 << ADSC;// начинаю преобразование
while(ADCSRA&(1<<ADSC)){};//жду окончания
v = ADCL;//читаю младший байт в переменную
}

теперь так выглядит настройка ацп, все равно не пашет....

Share this post


Link to post
Share on other sites
с ебэя дорогая выйдет доставка?

Все зависит от продавца. Но там всегда указана цена и доставки в том числе, больше чем написано там платить не нужно будет.

Share this post


Link to post
Share on other sites

ADMUX = 0x4F; - выбран в качестве опорного AVcc и 15-й канал мультиплексора = 0V(GND).

Что ты при этом хочешь получить в результате?

Edited by Alexeyslav

Share this post


Link to post
Share on other sites

Извиняюсь за ошибку, но даже так я не получаю 0 в регистре.

как я понял на 15-ом канале я должен измерять 0.

прерывание по завершению работы ацп есть.

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

Заранее благодарен.

ADMUX |=0b01101110;
ADCSRA |=0b10001110;
//какой-то код
ADCSRA |=1<<ADSC;
sei();
//какой-то код
ISR(ADC_vect) {v = ADCH;}
//какой-то код

0x000 represents ground - из даташита

Share this post


Link to post
Share on other sites

Подожди пока с прерываниями, ты пока обычную работу АЦП освой. Сделай простой пример - в бесконечном цикле старт измерения, ожидание результата передача через UART обеих частей и ADCL и ADCH. Кстати, у тебя наверно из-за того что не читаешь ADCH в 10-битном режиме ADCL защелкнулось и не меняется до тех пор пока весь регистр не прочитаешь. Начни с основ... 10 бит АЦП - необходимо прочитать обе половинки 16-бит регистра. Можно читать все 16 каналов по очереди и выводить в UART в 16-ричном виде(или приравняв все коды меньше $20 пробелу), после 16-го канала вывести $0D0A тогда в терминале можно будет визуально видеть изменения в удобном виде. Если входы АЦП не подключать - они будут чутко реагировать на поднесение руки, и даже факт вставания с кресла.

Share this post


Link to post
Share on other sites

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

по поводу верхнего/нижнего регистров я установил бит ADLAR.

и можно пожалуйста пример старта преобразования/ожидания/чтения

Share this post


Link to post
Share on other sites

Не понял: какой 15-й канал, какие все 16 каналов в МЕГА8??? 6 каналов в DIP + 2 канала - TQFP и MLF!

Share this post


Link to post
Share on other sites

Я выше давал на ассемблере.

Регистрами сдвига много не посмотришь терминалкой всегда проще - там и экран поширше.

#define ADC_run SBI ADCSRA, ADSC
.macro wait_adc
SBIC ADCSRA, ADSC
RJMP PC-0x0001
.endmacro
.macro set_io ; использовать регистр ACCUM для загрузки константы в порт
LDI ACCUM, @1 ; 1 такт
OUT @0,	 ACCUM ; 1 такт
.endmacro
.DEF ACCUM = R25
; Инициализация
; Настройка USART
; Тактовая частота 7,3728Мгц.
; Делитель USART: (таблица 60 из даташита)
; 3 = 115200
; 5 = 76800
; 7 = 57600
; 11 = 38400
; 15 = 28800
; 23 = 19200
set_io UBRRH, 0
set_io UBRRL, 3					 ; Set baud rate = 57600 (Proteus поддерживает максимальную скорость 57600)
set_io UCSRB, (1<<RXEN)|(1<<TXEN)	 ; Enable receiver and transmitter
set_io UCSRC, (1<<URSEL)|(3<<UCSZ0) ; Set frame format: 8data, 1stop bit
; Настройка АЦП (стр.200 даташита)
set_io ADMUX, 0b11000000 ; Опорное напряжение - внутренний, 2.56В
set_io ADCSRA, 0b10000110 ; ADC Enable, single-conversion mode, Fadc = 7,3728Мгц/64 = 115200


; Подпрограммы
ADC_run_transmitt:
ANDI ACCUM, 0x0F	 ; Ограничим входной параметр значением 0-15
ORI ACCUM, 0b11000000
OUT ADMUX, ACCUM	 ; Выбор канала АЦП, опорное = встроен. 2.56В
ADC_run
wait_adc
IN			 ACCUM, ADCL
RCALL USART_Transmit
IN			 ACCUM, ADCH
RCALL USART_Transmit
ret
USART_Transmit:
; Wait for empty transmit buffer
sbis UCSRA,UDRE
rjmp USART_Transmit
; Put data into buffer, sends the data
out UDR, ACCUM
ret
USART_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get and return received data from buffer
in ACCUM, UDR
ret

п.с. согласно даташита, в меге 16-канальный мультиплексор, но наружу выведены только первые каналы, остальные работают но для технических целей. например, на одном из каналов висит напряжение опорного источника для того чтобы можно было выяснить масштаб АЦП когда источник опорного напряжения для АЦП установлен Vcc, таким образом через вычисления можно измерить напряжение питания контроллера.

Edited by Alexeyslav

Share this post


Link to post
Share on other sites

Скажите пожалуйста, а где можно почитать про работу с датчиками температуры на AVR? Смог найти только на С, интересует на асме

Share this post


Link to post
Share on other sites

16 каналов с учетом резерва, пожалуйста хелп, амба!

я в асме почти 0,

Share this post


Link to post
Share on other sites

Хм... в даташитах на датчик. Если датчик аналговый - используешь АЦП, если цифровой - соответствующий интерфейс. И то и другое описано в даташитах как на датчик так и на микроконтроллер.

Если речь идет о DS18B20 он работает по 1-wire протоколу, который не реализован в контроллере - просто его надо реализовать программно дерганием ножек. Брат ьчью-то разработку нисколько не легче чем создать свою - все равно придется разбирать как она работает и какие ресурсы использует. Если такой алгоритм будет долго держать прерывание запрещенным а в твоем проекте это недопустимо - то придется искать другой алгоритм, а поскольку они передираются друг у друга каждый раз внося свои баги - искать подходящий будешь дольше чем написать свой. Большая редкость - алгоритмы позволяющие работать с двумя и более такими датчиками на одной линии и автоматическим определением их количества.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. 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 Jesterary
      Здравствуйте. Подскажите, был ли у кого-то опыт отправки изображений с камеры (подключенной через UART или bluetooth-камеры) через GPRS (у меня модуль SIM800L, но в целом это не принципиально) на удаленный сервер? Средствами управляющего микроконтроллера, пусть даже ардуины какой-нибудь, но не малины. Возможно ли это вообще? Хотелось бы, конечно, использовать в проекте беспроводную камеру и общаться с ней, ибо камеры, подключаемые напрямую так себе качество дают. 
      Сразу скажу, что важна именно такая связь. Микроконтроллер + модуль связи + камера находятся в коробке и путешествуют по городу, в это время человек сидя дома на диване может смотреть фото с этой камеры. Смартфон для моих целей не подойдет, суть именно в микроконтроллере с модулями.
      Если у кого-то такое получалось - поделитесь, пожалуйста :)
      А то нахожусь в некоторой прострации и даже не знаю, в какую сторону думать.
    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • 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; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
  • Сообщения

    • Безусловно. Чтобы не лежали без дела - вполне достаточное оправдание. Подумал, или измерил? Чувствительность Musical Fidelity A1 около 0,7 Вольта, для полной мощности. Поскольку платы А1 самодельные, логичнее бы было уменьшить их усиление, "отдав" больше лампе. Оно и искажений в транзисторной части стало бы поменьше, и "ламповости" добавилось.
    • Мне кажется, нет смысла заморачиваться на подобных решениях, разве что для экзотики. Вот, например, микросхема PAM2803 - это готовый драйвер для питания светодиода от одной или двух батареек. Не надо мотать трансформатор (покупается или сдувается с какой-нибудь платы индуктивность заводского изготовления); остальных деталей минимум; резистором можно выставить любой ток светодиода. ИМС хорошо держит ток светодиода, стартует при напряжении 0,9 В и выше, работает при снижении аж до 0,4 В. КПД при 1,5 В не ниже 70%, а с двумя батарейками - до 90%. Ток светодиода можно задать любой, вполне реально и до 1 А. Есть защита от обрыва в цепи светодиода и от перегрева.
    • Прям столько? Нифига себе   Мне кажется это должно зависеть от размера замкнутого контура. У этих клещей диаметр зажимов пару десятков метров? А, вроде ж поля недостаточно, нудно ещё его движение. Они пару десятков метров в диаметре и вы ими активно махаете?
    • Ошибки в прошлом становятся опытом в будущем.  
    • Вадим, LME49710 не пробовал ставить? Усиление на 20 кГц под 70 дБ, должна подойти.
    • Давно это было, может что и путаю, но у меня про этот софт остались воспоминания, что в реальном времени он не работает. Можно только картинку скинуть. По-моему, где-то из меню на осциллографе, хотя может и из меню программы. В реальном времени идёт через VGA (если на вашем есть), но там только копия экрана во весь экран монитора, и ничего с компьютера делать нельзя. В общем, крутил я её тогда довольно долго, несколько дней. Искал альтернативные, штудировал форумы, ещё как-то копался... единственное, что осталось в памяти, - что эта прога может понадобиться только если понадобится сделать скриншот экрана осциллографа. Но за всё время, что использую, так ни разу и не понадобилось.
    • срисуешь схему , подпишешь элементы и все узнаешь ... в том числе и то, что нет смысла собирать мусор ...
×
×
  • Create New...