cd4051(к561кп2) - не получается..

whoim
Offline
Зарегистрирован: 03.11.2011

Голову ломаю, монтаж проверяю, видимо не до конца я вьехал как оно работает..
Схема такая:  http://img-fotki.yandex.ru/get/4610/26688175.0/0_6c270_d99b2985_orig
только вместо переменных резисторов стоят постоянные 10Ком на GND, и на них я через 100Ком подаю 5В (эти же, которыми питается ардуина и мультиплексоры).

Читаю так:

//читаем расширения аналоговых входов
void read_inputs() {
 
 //настройка управляющих пинов К561ЛА2
 pinMode ( 10 , OUTPUT ) ; // s0  выход 
 pinMode ( 9 , OUTPUT ) ; // s1  выход 
 pinMode ( 8 , OUTPUT ) ; // s2  выход  
 int r0 = 0 ;    // значение выбрать вывод на 4051 (S0) 
 int r1 = 0 ;    // значение выбрать вывод на 4051 (S1) 
 int r2 = 0 ;    // значение выбрать вывод на 4051 (S2) 
 //int row = 0 ; // storeing the bin code      
 int count = 0 ; // щётчик 
 //int bin [ ] = { 000 , 1 , 10 , 11 , 100 , 101 , 110 , 111 } ; // Массив двоичных числ определяющих номер выбранного входа/выхода микросхемы 4051, с 1 по 8. 
  
 while (digitalRead(KEY_BACK) != LOW) {
   lcd.clear();
   lcd.setCursor(0,0);
   for ( count = 0 ; count <= 7 ; count ++ ){ // цикл перебора элементов массива с 1 по 8 
           //row = bin [ count ] ;      
           //r0 = row & 0x01 ;      
           //r1 = ( row >> 1 ) & 0x01 ; // 
           //r2 = ( row >> 2 ) & 0x01 ; // 
           r0 = bitRead(count,0);
           r1 = bitRead(count,1);
           r2 = bitRead(count,2); 
           digitalWrite ( 10 , r0 ) ;      
           digitalWrite ( 9 , r1 ) ;      
           digitalWrite ( 8 , r2 ) ; 
           delay(1);    
           lcd.print(analogRead(0)/8);
           lcd.print("/");
  } 
   lcd.setCursor(0,2);
   for ( count = 0 ; count <= 7 ; count ++ ){ // цикл перебора элементов массива с 1 по 8 
           r0 = bitRead(count,0);
           r1 = bitRead(count,1);
           r2 = bitRead(count,2); 
           digitalWrite ( 10 , r0 ) ;      
           digitalWrite ( 9 , r1 ) ;      
           digitalWrite ( 8 , r2 ) ;
           delay(1);      
           lcd.print(analogRead(1)/8);
           lcd.print("/");
  } 
  delay(100);
 }
}

Проблема такая.. Даю сигнал на X0 любой микросхемы - сигнал появляется на 0 и 1 "месте", подаю на X1,X2 - появляется и исчезает, когда захочет.. Примерно то же и с остальными - либо "на себя и следующий" отображает значения, либо они прыгают аки сумасшедшие пока держу рукой и пропадают (или нет).

Скажите - программа правильно написана? Чтобы я успокоился с пониманием процесса и пошел копать монтаж. Я так понимаю: пинами s0-s2 мы устанавливам, какую ногу будем читать, после чего она передается на соответствующий аналоговый пин ардуины, который мы и читаем. Так же?

step962
Offline
Зарегистрирован: 23.05.2011

Что-то мне подсказывает, что в вашей схеме нет раздельной адресации микросхем, в результате они "говорят", перебивая друг друга. Сравните эту схему подключения со своей:

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

ЗЫ: посмотрел еще раз. A1...3 - это у вас адресные линии для выбора просматриваемого канала? тогда они не подойдут для выбора схемы. Вам, видимо, надо разобраться с заземленными Ex - один из этих выводов скорее всего стробовый (надо полагать Es). Подавая на него сигнал (видимо LOW) вы и будете выбирать, какой из чипов активен.

whoim
Offline
Зарегистрирован: 03.11.2011

 В схеме что я использую у микросхем один выход. Управляющие (1,2,3) заведены так же но без DD3, а выходы (Y1, Y2, по одном на микросхему) заведены на разные аналоговые порты. Вроде как микросхемы должны одновременно переключаться на одни и те же входы, но "пробрасывать" сигнал на разные аналоговые порты..

whoim
Offline
Зарегистрирован: 03.11.2011

 ЗЫ: посмотрел еще раз. A1...3 - это у вас адресные линии для выбора просматриваемого канала? тогда они не подойдут для выбора схемы. Вам, видимо, надо разобраться с заземленными Ex - один из этих выводов скорее всего стробовый (надо полагать Es). Подавая на него сигнал (видимо LOW) вы и будете выбирать, какой из чипов активен.

Так выход с чипов идут на разные аналоговые входы, должно же быть без разницы какой чип активен? Вроде микросхема - полный аналог CD4051, а про него пишут так: 

Вечером попробую одну микросхему..

step962
Offline
Зарегистрирован: 23.05.2011

Логично.

Кстати, как понимать комментарий:

//настройка управляющих пинов К561ЛА2

whoim
Offline
Зарегистрирован: 03.11.2011

Кстати, как понимать комментарий:

 пины ардуино (в моем случае MCU-40), которые будут управлять сдвигом и фиксацией (я правильно понимаю?) всех мультиплексоров (одновременно). Кстати, чтобы использовать эту схему как выход (ШИМ), достаточно на аналоговые выходы атмеги подать сигнал нужный или надо еще дополнительно переключать мультиплексоры в другой режим?

Логично

тогда, видимо, проблема в монтаже или еще в каких то мелочах.. Буду смотреть вечерком.

 

whoim
Offline
Зарегистрирован: 03.11.2011

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

Спасибо - все работает!