anking
Участник-
Постов
56 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о anking
-
Звание
Участник
-
Симуляция в протеусе
anking ответил anking тема в Схемотехника
если ставлю частоту например 1 герц то лампочка моргает, и показания DC вольтметра меняются, но вот 60 герц... и полные нули... -
Симуляция в протеусе
anking опубликовал тема в Схемотехника
Может я гдето туплю. подскажите почему лампочка не горит в вот такой вот схеме... -
c624 что за конденсатор?
anking ответил anking тема в Схемотехника
а как определить напряжение? я думал 105 это температура -
c624 что за конденсатор?
anking опубликовал тема в Схемотехника
гуглил но не нашел ни даташит ни вменяемые характеристики для этого кондера. 105 c624 что за конденсатор? припаян на плате питания монитора, их там два, зеленые приблизительно два см в высоту и 1 в диаметре. на сколько вольт, сколько фарад? простите если слишком тупой вопрос просто не знаю где еще спросить -
режим шим
anking ответил anking тема в MCS51, AVR, PIC, STM8, 8bit
Значит для управления двигателем переменного тока мне не подойдет шим, правильно я вас понял? Где можно найти простеньких примеров для генерации переменного тока с цап? -
режим шим
anking ответил anking тема в MCS51, AVR, PIC, STM8, 8bit
гуглил но ничего конкретного не нашел. Все очень сложно и запутанно. Мне бы полегче чтонить. Я подключил тот вывод что у меня есть к осфилографу но треугольный график(возрастание-убывание) не получил... стоит ровненький "заборор"... я так понимаю из-за того что он видит только вкл-выкл. но как заставить построить линию? -
режим шим
anking ответил anking тема в MCS51, AVR, PIC, STM8, 8bit
использовал функцию _delay_us() и все заработало. Только такой вопрос, при вызове этой функции обработка приложения разве не прекращается? пока контроллер спит, выполняются ли прерывания? что конкретно "спит" во время выполнения этой функции? И второй вопрос... как сгенерировать синусоидальный сигнал? при помощи двух последовательных таймеров? -
режим шим
anking опубликовал тема в MCS51, AVR, PIC, STM8, 8bit
Пользую atmega 48. Включаю шим на таймере 0 Но светодиод горит постоянно и не геснет. в чем вилы? #define F_CPU 7372800 #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> void init_pwm (void) { TCCR0A=(1<<COM0A1)|(1<<WGM00); TCCR0B=(1<<CS00); OCR0A=0x00; } void pause (unsigned int a) { unsigned int i; for (i=a;i>0;i--); } int main (void) { unsigned char i; DDRD=0b01000000; init_pwm(); while (1) { for (i=0;i<255;i++) { OCR0A++; pause(1000); } for (i=0;i<255;i++) { OCR0A--; pause(1000); } } } -
реле-переключатель
anking ответил anking тема в Схемотехника
12v DC. А как тогда отключать транзистор при сигнале с другово места? -
реле-переключатель
anking ответил anking тема в Схемотехника
Классное реле.... только в продаже не найти... пробовал искать remote switch relay на ebay но там только готовые решения с пультами. Никаких отдельных реле не продается... есть какой-нибудь аналог или вообще какнибудь проблему можно обойти по-другому? Нашел вот этот... но почемуто в продаже только модификации с одной обмоткой...мне бы с двумя и с двумя фиксированными состояниями. -
реле-переключатель
anking опубликовал тема в Схемотехника
Необходимо реализовать подачу напряжения в замкнутом контуре по сигналу на проводе 1 с устройства, и отключение по сигналу на проводе 2. Притом когда сигнал на проводе 1 пропадает, напряжение должно сохранаяться в контуре до появления сигнала на проводе 2. Есть ли какое реле которое имеет 2 обмотки и может работать как переключатель в данном случае? -
UART и прерывания
anking ответил anking тема в MCS51, AVR, PIC, STM8, 8bit
Спасибо что разъяснили, хотя над сдвигом еще придется голову поломать Набросал себе такой хидер для удобства, точнее украл с avrfreaks #define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT)) #define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT)) #define FLIPBIT(ADDRESS,BIT) (ADDRESS ^= (1<<BIT)) #define GETBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT)) #define BITWRITE(c,p,m) (c ? SETBIT(p,m) : CLEARBIT(p,m)) на первое время я думаю покатит, все же лучше чем сдвиги самому продумывать А вот кольцевой буфер идею которого я нашел где-то в гугле Правда работать не хочет... и несколько отличается от того, что мне писали здесь, вместо указателейц используется побитовая маска, идею которой я, дурак, так и не понял В статье писали что лучше всего использовать такой буфер в размерности 256, при этом битовую маску задавать одним байтом... может кто пояснит, спасибо. #define RXBUF_SIZE 16 //размер буфера обязательно равен степени двойки! #define RXBUF_MASK (RXBUF_SIZE-1) #define BLOCK_TIMEOUT 10 #define BYTE_TIMEOUT 10 #define BLOCK_SIZE 8 unsigned char rxbuf[RXBUF_SIZE]; unsigned char inrx, outrx; unsigned char rxtimeout = 0; unsigned char idxDiff(unsigned char idxIN, unsigned char idxOUT, unsigned char bufsize) { if (idxIN >= idxOUT){ return (idxIN - idxOUT); FLIPBIT(PORTB,0); } else{ return ((bufsize - idxOUT) + idxIN); FLIPBIT(PORTB,1); } } //программка отслеживает прием и его таймауты, и в зависимости от приема // сбрасывает буфер либо переключает режим работы. Подпрограмма должна // вызываться в бесконечном цикле main. void usartPool (void) { char value; unsigned char rxcnt = idxDiff (inrx, outrx, RXBUF_SIZE); if (0 == rxcnt) { //в буфере ничего нет if (rxtimeout >= BLOCK_TIMEOUT) { //в буфере ничего нет давно //... } } else if (rxcnt < BLOCK_SIZE) { //в буфере что-то есть, но мало if (rxtimeout >= BYTE_TIMEOUT) { //прошла слишком большая пауза между байтами, // сбрасываем буфер приема outrx = inrx; } } else { //в буфере корректно приняты BLOCK_SIZE байт, // обрабатываем данные //... do{ value = rxbuf[outrx++]; while ( !( UCSR0A & (1<<UDRE0)) ) UDR0 = value; outrx &= RXBUF_MASK; } while(inrx!=outrx); } } int main (void) { USART_Init(BAUD_PRESCALE); sei(); for(;;) // Loop forever { usartPool(); } } ISR(USART_RX_vect) { char ReceivedByte; ReceivedByte = UDR0; // Fetch the recieved byte value into the variable "ByteReceived" //while ( !( UCSR0A & (1<<UDRE0)) ) UDR0 = ReceivedByte; // Echo back the received byte back to the computer rxbuf[inrx++] = ReceivedByte; inrx &= RXBUF_MASK; rxtimeout = 0; FLIPBIT(PORTB,0); } -
UART и прерывания
anking ответил anking тема в MCS51, AVR, PIC, STM8, 8bit
Вам это может показаться элементарным но все же _delay_ms(100); PORTB|=(1<<0); PORTB|=(0<<1); PORTB|=(1<<2); _delay_ms(100); PORTB&=(0<<0); PORTB&=(1<<1); PORTB&=(0<<2); Средний светодиод при таком раскладе не моргает? почему? в первом случае использую или но если использую или и во втором то не моргают все? так в чем разница между и и или при обращении к регистрам? что за символ такой "<<"и чем он отличается от ">>" и где их применять? прочитал про побитовые операции но там нигде нет очевидных примеров про регистра и все на асме PS отличный пример про кольцевой массив... буду пробовать заюзать -
UART и прерывания
anking ответил anking тема в MCS51, AVR, PIC, STM8, 8bit
Разобрался почему не работало... Было включено прерывание (1<<UDRIE0) о пустом буфере. Следовательно вопрос прерывание работает всегда даже если у меня нет для него функции? И как можно отменить отдельное прерывание далее по программе? (UCSR0B&=~(_BV(UDRIE0)); - вот это что-то не работает) как можно обратиться к отдельному биту в регистре не похерив все остальные? И так что там по поводу кольцевого буфера, может подкинет кто примерчик пожалста -
UART и прерывания
anking ответил anking тема в MCS51, AVR, PIC, STM8, 8bit
А можно примерчик кольцевого буфера для usart на avr студии? попробовал для простоты переписать прогу так, начал с совсем простого, но прерывание не работает #include <avr/io.h> #include <avr/interrupt.h> #define USART_BAUDRATE 9600 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) void USART_Init( unsigned int baud ) { // Set baud rate UBRR0H = (unsigned char)(baud>>8); UBRR0L = (unsigned char)baud; // Enable receiver and transmitter & interrupts UCSR0B = (1<<RXCIE0)|(1<<UDRIE0)|(1<<RXEN0)|(1<<TXEN0); // Set frame format: 8data, 1stop bit UCSR0C = (0<<USBS0)|(3<<UCSZ00); } int main (void) { USART_Init(BAUD_PRESCALE); sei(); for(;;) // Loop forever { /* while ((UCSR0A & (1 << RXC0)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR ReceivedByte = UDR0; // Fetch the recieved byte value into the variable "ByteReceived" while ((UCSR0A & (1 << UDRE0)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it UDR0 = ReceivedByte; // Echo back the received byte back to the computer*/ } } ISR(USART_RX_vect) { char ReceivedByte; ReceivedByte = UDR0; // Fetch the recieved byte value into the variable "ByteReceived" UDR0 = ReceivedByte; // Echo back the received byte back to the computer } Забыл написть - Мега48 на плате STK48 добавил в бесконечный цикл мигание диодом если закомментироваль глобальное разрешение прерываний - мигает, если нет то нет