Перейти к содержанию

Помогите с инкрементом в операторе ветвления


Юстас

Рекомендуемые сообщения

Сначала мучался написать код динамической индикации на асме. Тот ещё венигрет)) После долгих стараний, решил в BASCOMe написать.  В принципе с индикацией-то всё ок. А вот с кнопкой фигня полная. Короче дело так:

1: В статическом состоянии, 7-сегметные индикаторы показывают 0.

2: После нажатия на кнопку, на порту PINA.0 появляется сигнал высокого уровня.

3: МК считывает это значение  в основной программе и должен инкрементировать переменную W + 1

4: Потом в прерывании от таймера 1 вывести это значение на индикаторы.

И тут засада, не выводит он ничего. В коде ниже, есть пояснение КРУПНЫМИ БУКВАМИ)) В архиве код и схема в протеусе.

Помогите разобраться с проблеммой...

 

Скрытый текст

 $regfile = "m32def.dat"
 $crystal = 16000000

   ' * * * заводим переменные * * *

   Dim W As Integer '  в этой переменной будет число которое хотим отобразить
   w=0

   Dim N1 As Byte
   Dim N2 As Byte
   Dim N3 As Byte
   Dim N4 As Byte

   Dim M1 As Integer
   Dim M2 As Integer
   Dim M3 As Integer
   Dim M4 As Integer

   Config Timer0 = Timer , Prescale = 1024
   On Timer0 Pulse
   Enable Interrupts
   Enable Timer0

   ' * * * настраиваем порты к которым цепляется индикатор на выход * * *

   Ddrc = &B11111111
   Ddrd = &B11111111
   DDRA = &B00000000

  ' * * * Основной цикл программы * * *
       Do

       if PINA.0 = 1 then     ' ТУТ ЗАСАДА
       w=w+1                  ' ОПЕРАТОР ВЕТВЛЕНИЯ НЕ ХОЧЕТ РАБОТАТЬ!!!
       end if                 ' НИ В КАКУЮ НЕ ИНКРЕМЕНТИРУЕТ ПЕРЕМЕНУЮ "W"

       loop

   Pulse:


         M1 = W
         M2 = M1
         M3 = M1
         M4 = M1

         M1 = M1 / 1000                      'обработка первого числа
         N1 = Abs(m1)

         M2 = M2 Mod 1000                    'обработка второго числа
         M2 = M2 / 100
         N2 = Abs(m2)

         M3 = M3 Mod 100                     ' обработка третьего числа
         M3 = M3 / 10
         N3 = Abs(m3)

         M4 = M4 Mod 10                      ' обработка четвертого числа
         N4 = Abs(m4)

Portc = &B00001000                           'зажигаем первое число
       Select Case N1
         Case 0 : Portd = &B11000000
         Case 1 : Portd = &B11111001
         Case 2 : Portd = &B10100100
         Case 3 : Portd = &B10110000
         Case 4 : Portd = &B10011001
         Case 5 : Portd = &B10010010
         Case 6 : Portd = &B10000010
         Case 7 : Portd = &B11111000
         Case 8 : Portd = &B10000000
         Case 9 : Portd = &B10010000
       End Select
       Waitms 5

Portc = &B00000100                           'зажигаем второе число
       Select Case N2
         Case 0 : Portd = &B11000000
         Case 1 : Portd = &B11111001
         Case 2 : Portd = &B10100100
         Case 3 : Portd = &B10110000
         Case 4 : Portd = &B10011001
         Case 5 : Portd = &B10010010
         Case 6 : Portd = &B10000010
         Case 7 : Portd = &B11111000
         Case 8 : Portd = &B10000000
         Case 9 : Portd = &B10010000
       End Select
       Waitms 5

Portc = &B00000010                           'зажигаем третье число
       Select Case N3
         Case 0 : Portd = &B11000000
         Case 1 : Portd = &B11111001
         Case 2 : Portd = &B10100100
         Case 3 : Portd = &B10110000
         Case 4 : Portd = &B10011001
         Case 5 : Portd = &B10010010
         Case 6 : Portd = &B10000010
         Case 7 : Portd = &B11111000
         Case 8 : Portd = &B10000000
         Case 9 : Portd = &B10010000
       End Select

       Waitms 5
Portc = &B00000001                           'зажигаем четвертое число
         Select Case N4
         Case 0 : Portd = &B11000000
         Case 1 : Portd = &B11111001
         Case 2 : Portd = &B10100100
         Case 3 : Portd = &B10110000
         Case 4 : Portd = &B10011001
         Case 5 : Portd = &B10010010
         Case 6 : Portd = &B10000010
         Case 7 : Portd = &B11111000
         Case 8 : Portd = &B10000000
         Case 9 : Portd = &B10010000
      End Select
      Waitms 5
return
end



 

Индикация + кнопка.rar

Изменено пользователем Юстас
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Не силён в баскоме, но запустите симуляцию при нажатой кнопке. И проанализируйте появившееся 5105.

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

По идее всё должно работать. И компилируется без проблем. Пол дня уже голову ломаю и ещё эти 5105 вообще праздник... Попробовал уже несколько вариантов ветвления таже каша. Протеус что ли химичит?
 

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Протеус не химичит. Он тупо исполняет волю программы.

Баском поволяет создать файл .coff? Если да, то создайте, чтобы посмотреть в протеусе что и как происходит.

Изменено пользователем солар

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

19 часов назад, Юстас сказал:

...После долгих стараний, решил в BASCOMe написать...

Постарайтесь еще и примите решение выбрать другой язык программирования (с возможностью отладки).

Ссылка на комментарий
Поделиться на другие сайты

О, здравствуйте Геннадий))) пару лет назад вы мне очень помогли с UARTom на асме)) А я вот опять за старое))
 

На просторах инета, окопал готовое решение для динамической индикации, на моей любимой амсе))

Застрял от пробелов знаний (косвенная адресация, RAM...) В этой программе высвечивается определённое число заданное програмистом. А я то хочу прикрутить кнопку и инкрементировать значение на индикаторе за счёт нажатия на эту кнопку. И тут самое страшное, как запихать двух-четырёх значное число в индикатор???? Думал UART и сдвиговый регистор засадить, и слать данные на индикатор какие хочешь. Но это в худшем случае) Но хотелось бы обойтись без UARTa.

Вот код с динамической индикацией слизанной из инета. Код рабочий:

Скрытый текст

.include "m16def.inc" // Подключаем заголовочный файл ATMega16
.def temp = r16 // Присваиваем регистрам символические имена
.def razr1 = r17
.def razr2 = r18
.def razr3 = r19
.def sys = r20
.def try = r21

.equ ch1=0b10011111 // Задаем эквивалентику цифр для общего анода
.equ ch2=0b00100101 // кстати можешь в папке этого проекта найти
.equ ch3=0b00001101 // файлы CHOC и CHOA, я в них поместил набор
.equ ch4=0b10011001 // символов, для простоты написания кода, для
.equ ch5=0b01001001 // общего катода и анода соответственно
.equ ch6=0b01000001
.equ ch7=0b00011111
.equ ch8=0b00000001
.equ ch9=0b00001001
.equ ch0=0b00000011

.dseg                               // сегмент ОЗУ
Visible:                            // метка Visible
.byte 6                             // по ней в ОЗУ зараезервируем 6 байт
.cseg                               // Программный сегмент
.org 0                               // Адрес вектора Reset
jmp Reset                         // Переходим на Reset
.org $012                          // Адрес вектора таймера 0 по переполнению
jmp TIM0_OVF ;                // Переходим на TIM0_OVF

Reset: // Метка Reset
ldi temp, high(RAMEND)    // Инициализируем стек  
out sph, temp
ldi temp, low(RAMEND)
out spl, temp

ldi temp, 0b11111110 // Порты D и B на выход, на нем висит наш индикатор 
out DDRD, temp
out DDRB, temp

ldi temp, 0b00000010 // Ставим предделитель CS = 010 
out TCCR0, temp 
ldi temp, 0b00000001 // TOV0 = 1 бит прерывания по переполнению таймера 0
out TIFR, temp
out TIMSK, temp
ldi temp, 0xFE 
out TCNT0, temp       // А тут в тикающий регистр засовываем FE
ldi sys, 0b10000000  // ставим начальное положение sys
sei                              // Разрешаем прерывания

CIKLE:                       // Основная программа
ldi try, ch1                  // Пихаем единицу в регистр 
sts Visible, try             // сохраняем в ОЗУ, 1 ячейка
rcall Delay                  // Вызываем подпрограмму задержки
ldi try, ch2                  // Дальше по аналогии, только меняем выводимые цифры
sts Visible, try
rcall Delay
ldi try, ch3
sts Visible, try
rcall Delay
ldi try, ch4
sts Visible, try
rcall Delay
ldi try, ch5
sts Visible, try
rcall Delay
rjmp CIKLE               // Переход на Proga

Delay: // Задержка
ldi razr1, 255
ldi razr2, 255
ldi razr3, 10
Pdelay:
dec razr1
brne Pdelay
dec razr2
brne Pdelay
dec razr3
brne Pdelay
ret

TIM0_OVF:              // Прерывание по переполнению             
cli                             // Запрещаем прерывания
lsr sys                       // Производим логический сдвиг вправо
cpi sys, 0b00000010 // Проверяем, не ушли ли за пределы сегментов отображения на индикаторе
breq Mary                  // Если ушли, переходим на обнуление т.е. метка Мэри
out PORTD, sys        // Если нет, выводим значение sys в порт
ld temp, X+               // Увеличиваем адрес регистра косвенной адресации
ld temp, X                 // Загружаем по данному адресу 
out PORTB, temp     // И выводим в порт B
Vix:                            // Метка Vix
ldi temp, 0x00            // Взводим тикающий регистр
out TCNT0, temp
sei                             // Разрешаем прерывания
reti                             // Выходим из прерывания

Mary:                          // Метка Мэри
ldi sys, 0b10000000   // В sys значение
out PORTD, sys         // Выводим на порт
ldi XH, high(Visible)    // Тут произведем зарядку 1 адреса нашего Visible в регистр косвенной
ldi XL, low(Visible)      // адресации, сперва старший, потом младший
ld temp, X                  // загрузим значение из X(Visible) в temp
out PORTB, temp      // И выкинем на порт 
rjmp Vix                     // Перейдем на Vix


 

Ссылка на комментарий
Поделиться на другие сайты

Архив к коду. Тут всё необходимое)
Объясните, с чего начать?

 

AVR_Asm_Lesson5_Dyn_Indic.zip

Изменено пользователем Юстас
Ссылка на комментарий
Поделиться на другие сайты

Почему выбран именно Бейсик ? Неудачный выбор, ИМХО. В сети мало примеров по нему.
Если плохо знаете любой язык, то советую остановиться на Си. По нему примеров в сети - как грязи. И дин. индикацию запилите на раз-два... И на форуме быстрее помогут.
 

Ссылка на комментарий
Поделиться на другие сайты

Лучше помучаться немного с Ассмом. Тогда Юстас хоть немного будет понимать, как работает МК и научится организовывать циклы своих алгоритмов.

Юстас, без обид, но пока выложенный Вами пример, говорит о Вашем полном непонимании процессов, протекающих в МК, и возможности их использования на благо своих нужд (программ).

Не буду прилюдно "разбирать по косточкам" Ваше творение, но скажу. В Ассме сначала нужно принять решение - какой процесс будет основополагающим для данной задачи, а потом "плясать" от него дальше.

Например, чтобы избавится от болезни Си (повсеместные delay), возьмем за основу динамический вывод (в Вашем случае это 6 цифр). Полное обновление дисплея, комфортное для глаза, примерно 50 Гц и выше. Тогда можно настроить прерывание по таймеру каждые 3mS (333Гц). Теперь можно выводить один символ за одно прерывание, а в остальное время, паузу между прерываниями, выполнить кучу других полезных задач вместо отработки задержки.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Си по любому придётся освоить в серьёз, хотя не люблю ужасно))) А идея такая. Есть полуавтомат, который ставит кнопки на одежду. В нём основную работу выполняет соленоид на 150 ватт. Сами понимаете, кнопки бывают разными и для каждой, сила удара разная. Блок управления который там стоит, отказал. В нём, невдомый МК без обозначения и судя по конвульсиям в индикации, и последующем отказе самого блка управления, данный МК приказал долго жить. Решил соорудить блок управления с нуля. Мозгом будет Мега16. Сила удара зависит от установки значения на 7-сег. индикаторах. Естественно кнопками + и - значение. Ну и 2 педали с микропереключателями, которые открывают силовой полевик самого соленоида. Нажатие одной педали ничего не даст, надо нажимать обе только тогда соленоид сработает и ударит по опресовке кнопки. Типа защита от дурака. Были случаи кода пальцы совали и в лепёшку короче(( Вот коротко об идее.

 

Изменено пользователем Юстас
Ссылка на комментарий
Поделиться на другие сайты

Я конечно бейсик уже подзабыл. Но если я не ошибаюсь переменная W и w будут разние. Или язык регистронезависим?

По пятницам мы с коллегой мучаем старые платы (ненужные или не рабочие). Они либо горят либо взрываются.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Продолжу повествование о своих мучениях))

Динамическая индикация пока что на уровне переваривания. Сейчас пишу основной код программы. Ну и по традиции опять не догоню проблемму))

По затее должно быть так:

1) Нажимаем обе кнопки и срабатывает команда подачи сигнала на порт.

2) Сигнал не абы какой, а определённой длительности которая задаётся кнопкой 3.

3) За отщёт длительности, отвечает Таймер_1 - прерывание по совпадению.

4) Так как кнопка 3 задаёт длительность, я для этого задействовал регистр, который эта кнопка инкрементирует.

Всё бы хорошо и сигнал подаётся и кнопки работают, да не всё... В программе, после заданной длительности по таймеру, сигнал с PORTD.0 не пропадает (зараза такая))) а должен пропасть, пока опять не нажмём обе кнопки PORTC.0 и PORTC.1

Ткните пальцем, где я накосячил, сам не осилю((

Код и архив: 

 

Скрытый текст

/*
 * ATmega_8_Project.asm
 *
 *  Created: 01.11.2016 22:11:39
 *   Author: Admin
 */ 

;ПЕРЕМЕННЫЕ************************************
.def temp = r16
.def flag = r17
.def DLTST_IMPSA = r18

;**********************************************

;ВЕКТОРА ПРЕЫВАНИЙ*****************************
.cseg
.org   0x000
  rjmp   RESET
.org 0x006
  rjmp TIMER1_COMPA
;**********************************************

;ИНИЦИАЛИЗАЦИЯ*********************************
RESET:
;СТЕК//
ldi   r16, low(RAMEND)
out   SPL,   r16
ldi   r16, high(RAMEND)
out   SPH,   r16
;ПОРТЫ//
ldi   temp, 0b00000000
out DDRC, temp
ser temp
out DDRD, temp
;НАСТРОЙКА ТАМЕРА 1//
ldi   temp, 0b00000000   ;пока что поставим всё в нули 
out   OCR1AH, temp               ;
out   OCR1AL, temp
out   TCCR1B, temp
ldi   temp, 0B00010000   ;разрешим прерывание Т1 по совпадению OCR1
out   TIMSK, temp

;*********************************************

;ОСНОВНОЙ ЦИКЛ********************************
CIKLE:
sbic PINC, 0                 ; проверяем нажатие кнопки 1
rjmp KNOPKA_2                ; если нажата, прыгаем проверять кнопку 2
sbic PINC, 2                 ; проверяем нажатие кнопки 3
rjmp INK_DLTNST              ; если нажата, прыгаем для инкримента переменной DLTST_IMPSA
rjmp CIKLE
;********************************************

;ПРЕРЫВАНИЕ ПО ВЕКТОРАМ**********************
TIMER1_COMPA:
cli
ldi flag, 1       ; поднимем флаг
sei
reti
;********************************************

;ПОДПРОГРАММА ИНКРИМЕНТА ДЛИТЕЛЬНОСТИ ИМПУЛЬСЯ***********************
INK_DLTNST:
inc DLTST_IMPSA    ; тут мы кнопкой PIN.2 задаём длительность импульса для соленоида
rjmp CIKLE
;********************************************************************

;Обработчик для нажатой кнопки***************
KNOPKA_2:
sbic PINC, 1     ; проверяем нажатие кнопки 2
rjmp IMPULS      ; если нажата подаём импульс на соленоид
rjmp CIKLE
;********************************************

;**********************************************************************************************
IMPULS:
sbi PORTD, 0               ; устанавливаем 0 бит в 1 на PORTD
out OCR1AH, DLTST_IMPSA    ; сливаем в счётный регистр таймера 1 нашу задержку для импульса
ldi   temp, 0b00000101     ; предделитель 1024 сброс по совпадению
out   TCCR1B, temp         ; включаем таймер с ним же предделитель на 1024
OJIDANIE: 
tst flag                   ; ждём пока флаг прерывания не поднимится
breq OJIDANIE              ; пока не поднимется, круитимся в цикле OJIDANIE
cbi PORTD, 0               ; а если поднялся, то сбасываем 0 бит PORTD
ldi   temp, 0b00000000     ; останавливаем таймер
out   TCCR1B, temp         ; для этого сливаем нули в регистр TCCR1B                       
clr flag                   ; очищаем флаг прерывания
clr temp                   ; temp тоже очищаем
out OCR1AH, temp           ; и сливаем нули в старший регистр сравнения OCR1AH
rjmp CIKLE                 ; возвращаемся в основной цикл
;*********************************************************************

Проект.rar

Изменено пользователем Юстас
Ссылка на комментарий
Поделиться на другие сайты

Логика такая. Сначала программа проверяет нажатие первой кнопки, если нажата, то проверяет нажатие второй кнопки - иначе возврат назад в цикл проверки первой кнопки. Блин мне же надо одновременное нажатие, в моём коде можно сначала нажать первую, а потом вторую и .... ща буду думать. Но меня другое беспокоит. Я хочу запускать таймер в подпрограмме и одновременно подать 1 в PORTD.0 , дождавшись прерывания по совпадению, сбрасывать PORTD.0 и останавливать таймер. А одновременное нажатие двух кнопок, как раз и запускало бы подпрограмму запуска таймера. В этой же подпрограмме есть и переменная в которой содержится время (бинарное) для таймера. Достигнув которого сработает прерывание по сравнению и PORTD.0 сбрасывается.

Ссылка на комментарий
Поделиться на другие сайты

@Юстас вам нужно познакомиться с понятием "подпрограмма". На одних rjmp далеко не уедешь. И начинать нужно с блок схемы. Её и обсудить легче, не вдаваясь в детали.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Григорий. Я это прекрасно понимаю) Можно и call/rcall заюзать, просто не хотел нагружать стек. Эта прога, пока что заготовка. Первые пробы что бы разобраться с возможностями микроконтроллера. На данном примере, я пытаюсь расширить и закрепить приобретённые знания программирования. И буду очень рад и признателен советам, умудрёных опытом людей))
 

Ссылка на комментарий
Поделиться на другие сайты

И я об этом. Ваша программа ещё далеко не программа. Попробуйте для неё нарисовать блок схему. Хотя бы мысленно. 

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

2. Программа формирования импульса. Ну это самое простое.

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

4. Программа установки длительности с контролем диапазона инкремента-декремента.

Отдельные небольшие программы легче писать и модернизировать. 

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Для начала я написал такой код. Учёл наставления Григория) В программе подробные пояснения. Протеус кстати отказался зажигать LED на PORTD.0

Код:

Скрытый текст

/*
 * ATmega_8_Project.asm
 * Кварц 16 МГц
 *  Created: 01.11.2016 22:11:39
 *   Author: Admin
 */ 
;**********************************************
;ПЕРЕМЕННЫЕ************************************
;**********************************************
.def temp = r16
.def flag = r17
.def DLTST_IMPSA = r18
.def ANTDRBZG = r19

;**********************************************

;**********************************************
;ВЕКТОРА ПРЕЫВАНИЙ*****************************
;**********************************************
.cseg
.org   0x000
  rjmp   RESET
.org 0x009
  rjmp   TIMER0_OVF
;**********************************************

;**********************************************
;ИНИЦИАЛИЗАЦИЯ*********************************
;**********************************************
RESET:
;СТЕК//
ldi   r16, low(RAMEND)
out   SPL,   r16
ldi   r16, high(RAMEND)
out   SPH,   r16
;ПОРТЫ//
ldi   temp, 0b00000000
out DDRC, temp           ; PORTC на вход
ser temp
out DDRD, temp
;НАСТРОЙКА ТАМЕРА 0//
ldi   temp, 0b00000011   ; предделитель 64
out   TCCR0, temp
ldi temp, 0b00000001     ; прерывание по переполнению каждые 980 мкс
out   TIMSK, temp
sei
;***********************************************

;***********************************************
;ОСНОВНЩЙ ЦИКЛ**********************************
;***********************************************
CIKLE:
rcall KNOPKI
rjmp CIKLE
;***********************************************

;***********************************************
;*******ПРЕРЫВАНИЕ ПО ВЕКТОРУ TIMER0_OVF********
;***********************************************
TIMER0_OVF:
ldi flag, 1       ; поднимем флаг
reti
;***********************************************


;***********************************************
;******ПРОГРАММА ПРОВЕРКИ СОСТОЯНИЯ КНОПОК******
;***********************************************
KNOPKI:
in temp, PINC        ; считываем PINC в переменную
cpi temp, 0b00000011 ; сравниваем с константой  
breq ANTIDREBEZG     ; если равно то запускаем антидребезг 60 мс
ret
;***********************************************


;***********************************************
;************ПРОГРАММА АНТИДРЕБЕЗГА*************
;***********************************************
ANTIDREBEZG:
tst flag           ; пповерим флаг
breq INKRIMENT     ; если поднят, прыгаем в INKRIMENT
ret                ; если нет, возвращаемся в основной цикл
INKRIMENT:
inc ANTDRBZG       ; инкримент переменной для антидребезга
ldi flag, 0        ; очистим флаг
cpi ANTDRBZG, 0x3c ; сравним переменую с 60 (примерно 60 мс)
ret                ; если равно 60 мс, то...
rjmp SET_PORTD0    ; ... прыгаем установить 1 в PORTD.0
;***********************************************

;***********************************************
;*********ПРОГРАММА УСТАНОВКИ PORTD.0***********
;***********************************************
SET_PORTD0:
sbi PORTD, 0       ; поднимем PORTD.0 в 1
clr ANTDRBZG       ; очищаем переменную
ret

 

 

Изменено пользователем Юстас
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
    • поняли неправильно. У ТЛ494 никакой защиты нет, усилители ошибки не защита, они не должны приводить к ложным импульсам. Причем тут "микруха" ?  надо нагружать ВСЁ. До сих пор вообще непонятно о каком ИИП идет речь и сколько у него каналов. Бесполезно схему рисовать? - Помогать так бесполезно. Картина кривая по самое "немогу" продолжаются картинки, снятые через ногу и без цены деления.
×
×
  • Создать...