Откуда на входе берётся постороннее напряжение.

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт ноя 13, 2014 19:37:34

Сообщение Stanislavich »

alex_ писал(а):Вопрос снимается, извиняй, я спросоня тебя перепутал с server021, спать пора :sleep:
А я тут в недоумении что я неправильно говорю :))
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср окт 15, 2014 16:56:53

Сообщение server021 »

Немного покопавшись понял, что на ножке 3.3 вольта когда я переключаю тумблер или 3.9 (напряжение питания) когда тумблер отключен. При это МК уверен что на ножке логический 0
Реклама
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт ноя 13, 2014 19:37:34

Сообщение Stanislavich »

server021 писал(а):Немного покопавшись понял, что на ножке 3.3 вольта когда я переключаю тумблер или 3.9 (напряжение питания) когда тумблер отключен. При это МК уверен что на ножке логический 0
Ну вроде логический ноль до 2.5 v максимум, если не ошибаюсь. А что за модель мк?
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср окт 15, 2014 16:56:53

Сообщение server021 »

ATMEGA16
Реклама
Эиком - электронные компоненты и радиодетали
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Вроде ж до половины питания, а не 2.5 В.
Кнопки к AVR-контроллеру лучше подключать между выводом и землей, а не между выводом и питанием. Это дает возможность использовать собственную подтяжку, хотя внешняя все равно надежнее.
Если схема
Кнопка. Замыкает 2 контакта, один из которых идет на какой-нибудь пин, а второй к плюсу напряжения, чего тут рисовать) Обычно заземляют такие вещи, особенно для кнопки, через резистор.
то откуда там возьмется лог.0? Надо хоть резистором подтянуть.
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср окт 15, 2014 16:56:53

Сообщение server021 »

У меня от батареи идёт провод на тумблер в одном положении к КМ идёт +3,3В, а в другом ножка остаётся в воздухе. Самое интересное, что на некоторых ножках все работает, а на некоторых нет. Ножки настроены абсолютно одинаково!
Реклама
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт ноя 13, 2014 19:37:34

Сообщение Stanislavich »

COKPOWEHEU писал(а):Надо хоть резистором подтянуть.
Перечитайте пару раз. Да и автор говорит не о кнопках...
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

server021 писал(а):У меня от батареи идёт провод на тумблер в одном положении к КМ идёт +3,3В, а в другом ножка остаётся в воздухе.
Запомните раз и навсегда - если Вы как-то опрашиваете вывод, он ни в каких случаях не должен болтаться в воздухе. Он всегда должен находится под каким-то потенциалом, взятом со схемы.
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср окт 15, 2014 16:56:53

Сообщение server021 »

Alkul писал(а):
server021 писал(а):УОн всегда должен находится под каким-то потенциалом, взятом со схемы.
Принудительно подтягивал к нулю, все равно + сохранился!
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

server021 писал(а):Принудительно подтягивал к нулю, все равно + сохранился!
Можно увидеть схему и исходник программы?
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср окт 15, 2014 16:56:53

Сообщение server021 »

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

#include <mega16.h>
#include <delay.h>

// 0 - красный 1- желтый 12 - желтый жел. миг 11 - 2 желтых 2 - зелёный 4 - белый
int svet1 = 0;  int svet2 = 0; int svet3 = 0;  int svet4 = 0; int svet5 = 0; int svet6 = 0; int svet7 = 0;  int svet8 = 0;  int svet9 = 0;
int svet10 = 0; int svet11 = 0; int svet12 = 0; int svet13 = 0; int svet14 = 0; int svet15 = 0;

int sig_ger = 0;
int i = 0; int m = 0; int t = 0; 
int contol_svet15 = 0; int contol_svet4 = 0; int contol_svet5 = 0; int tmp = 0;

void update_status_svetofor()
{   
    if (svet13 == 0) {PORTC.6 = 0; PORTB.5 = 1;} else {PORTC.6 = 1; PORTB.5 = 0;}
   
    if (svet12 == 0) {PORTD.6 = 1;} else {PORTD.6 = 0;} 
    
  
    if (svet4 == 0) {PORTA.4 = 0; PORTA.5 = 1; PORTA.6 = 1; PORTA.7 = 1;}
    if (svet4 == 1) {PORTA.4 = 1; PORTA.5 = 0; PORTA.6 = 1; PORTA.7 = 1;} 
    if (svet4 == 2) {PORTA.4 = 1; PORTA.5 = 1; PORTA.6 = 0; PORTA.7 = 1;} 
    if (svet4 == 4) {PORTA.4 = 1; PORTA.5 = 1; PORTA.6 = 1; PORTA.7 = 0;}      
    
    if (svet5 == 0) {PORTA.0 = 0; PORTA.1 = 1; PORTA.2 = 1; PORTA.3 = 1;}
    if (svet5 == 1) {PORTA.0 = 1; PORTA.1 = 0; PORTA.2 = 1; PORTA.3 = 1;} 
    if (svet5 == 2) {PORTA.0 = 1; PORTA.1 = 1; PORTA.2 = 0; PORTA.3 = 1;} 
    if (svet5 == 4) {PORTA.0 = 1; PORTA.1 = 1; PORTA.2 = 1; PORTA.3 = 0;}
    
    
    if (svet15 == 0) {PORTB.0 = 1; PORTB.1 = 0; PORTB.2 = 1; PORTB.3 = 1; PORTB.4 = 1;}
    if (svet15 == 1) {PORTB.0 = 1; PORTB.1 = 1; PORTB.2 = 0; PORTB.3 = 1; PORTB.4 = 1;} 
    if (svet15 == 2) {PORTB.0 = 1; PORTB.1 = 1; PORTB.2 = 1; PORTB.3 = 0; PORTB.4 = 1;}
    if (svet15 == 12) {PORTB.1 = 1; PORTB.2 = 0; PORTB.3 = 1; PORTB.4 = 1; tmp = tmp +1; if (tmp == 3000) {if (PORTB.0 == 1) {PORTB.0 = 0;} else {PORTB.0 = 1;} tmp = 0;}}
    if (svet15 == 11) {PORTB.0 = 0; PORTB.1 = 1; PORTB.2 = 0; PORTB.3 = 1; PORTB.4 = 1;} 
}

void tranzit()
{
if (t == 0) {svet15 = 0; svet13 = 0; svet12 = 0;svet4 = 0; svet5 = 0;}


if (PINC.0 == 1) {svet4 = 0; svet5 = 0;} else 

    {
        if ((PINC.1 == 0) && (contol_svet5 == 0))   {svet5 = 2; svet4 = 0;}
        if ((PINC.1 == 1) && (contol_svet4 == 0))   {svet4 = 2; svet5 = 0;}
    }
    
    
    if (PIND.5 == 1) {svet15 = 0;} else
    {
        if (PINC.2 == 0) {
        
        if (((svet5 == 1) || (svet5 == 2)) && ( contol_svet15 == 0) ) {svet15 = 12;}
        if ((svet5 == 0) && ( contol_svet15 == 0) ) {svet15 = 11;}
        }
        else
        {
        if (((svet4 == 1) || (svet4 == 2)) && ( contol_svet15 == 0) ) {svet15 = 2;}
        if ((svet4 == 0) && ( contol_svet15 == 0) ) {svet15 = 1;}
        }    
    } 

if (PINC.5 == 1) {contol_svet5=0; contol_svet4=0; if (PINC.1 == 1) {svet5=2; svet4=0;} else {svet5=0; svet4=2;}}

if (PINC.7 == 1) {contol_svet5=2; contol_svet4=2; if (PINC.1 == 1) {svet5=1; svet4=0;} else {svet5=0; svet4=1;}}
if (PIND.0 == 1) {contol_svet4=1; svet4 = 0; contol_svet15 = 0;}
if (PIND.1 == 1) {contol_svet5=1; svet5 = 0; contol_svet15 = 0;}
if (PIND.4 == 1) {svet15 = 0; contol_svet15 = 1;}     
}

void marsh_gotov_manevrov()
{       //написать логику!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
svet13 = 0;     
    if (PIND.5 == 0) {svet13 = 4;} else
    {
        if ((PINC.4 == 0) && (PINC.3 == 0)) {svet13 = 0;}
        if ((PINC.4 == 0) && (PINC.3 == 1)) {svet13 = 4;}
        if ((PINC.4 == 1) && (PINC.3 == 0)) {svet13 = 0;}
        if ((PINC.4 == 1) && (PINC.3 == 1)) {svet13 = 4;}       
    } 
    if (PINC.2 == 1) {svet12 = 4;} else {svet12 = 0;}
    if (PINC.1 == 0) {svet4 = 0; svet5 = 4;} else {svet4= 4; svet5 = 0 ;}
    


}
void manevrov()
{   
  if (m == 0) {svet15 = 0; svet13 = 0; svet12 = 0;svet4 = 0; svet5 = 0;}
  if (PIND.7 == 1){marsh_gotov_manevrov();} 
    if (PIND.0 == 1) {svet4 = 0;}
    if (PIND.1 == 1) {svet5 = 0;}
    if (PIND.2 == 1) {svet12 = 0;}  
    if (PIND.3 == 1) {svet13 = 0;}
    if (PIND.4 == 1) {svet15 = 0;}
}

void main (void)                                              
{
    DDRA = 0xff;
    PORTA= 0xff;  
    DDRB = 0xff;
    PORTB= 0b00111111;
    DDRC = 0xff;
    PORTC= 0x00;
    DDRD = 0xff;
    PORTD= 0b0000000; 
    
    while (1)
    {      
     
    if (PINB.6 == 1)
    {svet2 = 0; svet3 = 0; svet8 = 0; svet9 = 0;}
    else
    {
        if (PINB.7 == 0) {tranzit(); t=1; m=0;} else {manevrov(); t=0; m=1;}
    
    }
      update_status_svetofor(); 
       
        
    }
    
     
}

Изображение
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Ключи 1-7 почему-то сдвоенные, подтяжки к питанию или земле нет. Ключ 2 вообще не подключен.
if (svet4 == 0) {PORTA.4 = 0; PORTA.5 = 1; PORTA.6 = 1; PORTA.7 = 1;}
if (svet4 == 1) {PORTA.4 = 1; PORTA.5 = 0; PORTA.6 = 1; PORTA.7 = 1;}
if (svet4 == 2) {PORTA.4 = 1; PORTA.5 = 1; PORTA.6 = 0; PORTA.7 = 1;}
if (svet4 == 4) {PORTA.4 = 1; PORTA.5 = 1; PORTA.6 = 1; PORTA.7 = 0;}
Чем обусловлен выбор именно таких чисел - 0,1,2,4,11,12, не проще было взять 0,1,2,3,4,5 или 0,2,4,8,0x10,0x20?
Принудительно подтягивал к нулю, все равно + сохранился!
Схему именно этого можно?
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

server021, попробуй отключить JTAG, в 16 меге он по умолчанию включен и сидит как раз на этих ногах, возможно он и мешает.
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

А товарищ прав, я тогда долго искал где косяк в прошивке и почему не работает LCD который у меня как раз повешен на прорт С. А вся проблема из-за JTAGa :facepalm:
Ответить

Вернуться в «AVR»