• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
IO22D08 sterowanie oraz biblioteka
#1
Witam wszystkich serdecznie . Mam ogromną prośbę odnośnie obsługi modułu IO22D08 ( 8 przekaźników , 8 wejść optoizolowanych 4 przyciski oraz 4 wyświetlacze 7 segmentowe ) .
Nie wiem jak obsłużyć przekaźniki oraz wyświetlacz , gdyż są one wszystkie obsługiwane przez 3 sztuki hc595 na jednej linii ( latch , clock , data ) . Bardzo prosiłbym aby ktoś mi pomógł to obsłużyć . Mile widziany przykład oraz wskazówki jak zmodyfikować ustawienia . Jeśli jest to i biblioteka .
Pozdrawiam .
 
Odpowiedź
#2
Obsługa to nauczenie się obsługiwać HC595. Tu jest przykład do takiego modułu: https://www.youtube.com/watch?v=xGUnh_JoTjw ale jakikolwiek tutorial do HC595 naprowadzi Cię jak z tym działać, nauczysz się z ledami to ten LCD tylko dodatkowo multipleksowanie, a przekaźniki tak jak ledy.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Prawdę mówiąc , chodzi mi o to że do tego wyświetlacza są podłączone 2 szt. hc595 , lecz w taki sposób że zupełnie nie wiem jak to ugryźć . Pierwszy z nich podłączony jest do segmentów C , F ,DP , A , D, E oraz !!! wspólnej katody pierwszej cyfry . Natomiast drugi hc595 odpowiednio : Katody czwartej cyfry , katody trzeciej cyfry, katody drugiej cyfry oraz segmentu B i C .
Zamieszanie jest niemałe jak dla mnie . 
Owszem poradziłbym sobie z tym szybko gdyby pierwszy hc595 odpowiadał tylko za katody , a drugi hc595 za same segmenty .  
Wszak oczywiste to jest że wyświetlanie trzeba multipleksowo zrealizować . 
Prosiłbym o jakiś przykład albo pomysł .
Przykład z linku to ślepa uliczka , ponieważ na tym ginie trop by dojrzeć jakiś przykładowy szkic/kod .
 
Odpowiedź
#4
Wgrałeś ten kod z komentarzy do filmu? Faktycznie może jest to powalony układ i nie znajdziesz gotowej biblioteki wyświetlającej od razu teksty.
Po wyliczeniu jaki jest kod dla segmentu i jaki dla poszczególnych led trzeba wziąć poszczególne bity i przenieść je do nowych bajtów dla pierwszego i drugiego HC, potem wysłać to jak w tym przykładzie. Hasło do Google "Operacje na bitach i maskowanie". I tak wysyłasz zawsze dwa bajty dla obu HC.
Nie widzę powodu, by zrobili te układy inaczej, przykład dla 4 przekaźnikowego powinien działać tak samo na 8.
No i jak są faktycznie 3 x74HC595 to wysyłasz 3 bajty tak poklejone. Nie wiem po co to zrobili, jeden HC pasuje do 8 przekaźników, dwa pozostałe do LED.
Niestety nie mam takiego modułu by to przećwiczyć u siebie.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
(30-12-2020, 09:14)kaczakat napisał(a): Niestety nie mam takiego modułu by to przećwiczyć u siebie.

To wystarczy jak autor wątku wrzuci schemat tego ustrojstwa, resztę można zgadnąć.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#6
(30-12-2020, 20:59)Robson Kerman napisał(a):
(30-12-2020, 09:14)kaczakat napisał(a): Niestety nie mam takiego modułu by to przećwiczyć u siebie.

To wystarczy jak autor wątku wrzuci schemat tego ustrojstwa, resztę można zgadnąć.
Przyznam szczerze , że nawet dla mnie jest tajemnicą jak wygląda ten schemat . Na tą chwilę operuję tylko na przypuszczeniach , chodź co prawda zdejmowałem już wyświetlacz by dociec co jest nie tak , stąd wiem jak jest podłączony
 
Odpowiedź
#7
(30-12-2020, 09:14)kaczakat napisał(a): Wgrałeś ten kod z komentarzy do filmu? Faktycznie może  jest to powalony układ i nie znajdziesz gotowej biblioteki wyświetlającej od razu teksty.
Po wyliczeniu jaki jest kod dla segmentu i jaki dla poszczególnych led trzeba wziąć poszczególne bity i przenieść je do nowych bajtów dla pierwszego i drugiego HC, potem wysłać to jak w tym przykładzie. Hasło do Google "Operacje na bitach i maskowanie". I tak wysyłasz zawsze dwa bajty dla obu HC.
Nie widzę powodu, by zrobili te układy inaczej, przykład dla 4 przekaźnikowego powinien działać tak samo na 8.
No i jak są faktycznie 3 x74HC595 to wysyłasz 3 bajty tak poklejone. Nie wiem po co to zrobili, jeden HC pasuje do 8 przekaźników, dwa pozostałe do LED.
Niestety nie mam takiego modułu by to przećwiczyć u siebie.
Cenna podpowiedź . Właśnie takie podpowiedzi są cenne  . Będę dalej kombinował / szukał / czytał.  Dam znać za jakiś czas .  Pozdrawiam .
 
Odpowiedź
#8
Zbudowałem sobie taki LCD na dwóch modułach HC595, ja akurat mam tylko wspólną anodę. Przykładowy kod wygląda tak:
Kod:
#include <SPI.h>
uint8_t bajt1=0b11110000, bajt2=0b11111111;
const uint8_t latch=10;
//const uint8_t data=11;
//const uint8_t clock=13;
void setup() {
  // put your setup code here, to run once:
pinMode(latch,OUTPUT);
//pinMode(data,OUTPUT);
//pinMode(clock,OUTPUT);
SPI.begin();
SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
digitalWrite(latch, LOW);
bajt2++;
bajt1--;

//uint8_t bajttemp1=0, bajttemp2=0;
//uint8_t maska1= 0b01010101;
//bajttemp1=bajt1 & maska1;
//bajttemp2=bajt2 & (~maska1);
//bajttemp1=bajttemp1 | bajttemp2 ;
//uint32_t start1=micros();
//  SPI.transfer(bajttemp1);
//  SPI.transfer(bajttemp2);
  SPI.transfer(bajt2);
  SPI.transfer(bajt1);
// delay(20);
//     shiftOut(data, clock, MSBFIRST, bajt1++);
//     shiftOut(data, clock, MSBFIRST, bajt2++);
digitalWrite(latch, HIGH);
  uint32_t stop1=micros();
//Serial.println((uint32_t)stop1-start1);
delay(100);


}
Chodziło tylko o odpalenie led, żadnego sensu lingwistycznego tu nie ma, sprawdziłem tylko, że shiftOut trwa około 200us, wysłanie sprzętowym SPI około 12us. Od biedy takie programowe daje radę, uC coś tam jeszcze zrobi oprócz wyświetlania. Lepiej wykorzystać SPI.
Co do przeniesienia bitów, to takie najprostsze, czyli bierzemy 5 bitów z jednego bajtu i 3 z drugiego, maskujemy sklejamy i wysyłamy zadziała tylko wtedy, gdy bity są na swoim miejscu, a tylko w różnych HC. Może być tak, że bit jest A i B jest na bicie 1 w różnych HC, wtedy trzeba go po pobrać, przesunąć i skleić, potem tak kolejne. Ilość operacji rośnie. Dodatkowe bity mogą być wymieszane również wewnątrz danego HC, wtedy nie zadziałają gotowe zestawy bitów poukładane w ładne tablice do użycia na typowych ekranach. Prościej napisać nowe układy znaków dla tej pomieszanej konfiguracji niż za każdym razem je sortować. Jak jest wspólna katoda to jest gotowy zestaw dla 16 znaków HEX + kropka do doklejenia:
uint8_t digit[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0b10000000};
A ja w swoim układzie po prostu wysyłam odwrotność takiego bajtu, bo moje świecą zwarte do GND.
I demo wyświetlenia wszystkich cyfr, bez wysyłania w przerwaniu:
Kod:
#include <SPI.h>
uint8_t bajt1=0b11110000, bajt2=0b11111111;
const uint8_t latch=10;

uint8_t digit[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0b10000000};
void setup() {
  // put your setup code here, to run once:
pinMode(latch,OUTPUT);

SPI.begin();
SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));

}

void loop() {
  // put your main code here, to run repeatedly:
static int c=0;


bajt1++;

for (int i=0;i<50;i++) //na 1s
{
  bajt2=1;
  for (int j=0;j<4;j++)
  {
   
  digitalWrite(latch, LOW);
  SPI.transfer(bajt2);
  int d=(((c+j)>16)?(c):(c+j)) ;
  SPI.transfer(~(digit[d]|0b10000000));
 
  digitalWrite(latch, HIGH);
 
 
  bajt2=bajt2<<1;
   delay(5);
  }
}

if (c<15)c++; else c=0;


}
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#9
Też borykałem się z obsługą tego modułu.
Napisałem kilka prostych funkcji pod to urządzonko do pobrania stąd: https://elfro.pl/?io22d08-library
Mam nadzieję że się przydadzą.
 
Odpowiedź
  


Skocz do:


Przeglądający: 2 gości