Przeszukaj forum
Pokazywanie wyników dla tagów 'wspólna anoda'.
Znaleziono 1 wynik
-
Witam wszystkich forumowiczów. Jest to mój pierwszy post na forum i jednocześnie pierwszy "większy" projekt na Arduino. Jestem dosyć początkujący, jeżeli chodzi o teoretyczne aspekty elektroniki i prosiłbym o sprawdzenie mojego schematu. Mam problem z multipleksowaniem wyświetlaczy 7-segmentowych o wspólnej anodzie. Cyfry na nich są wyświetlane ale widoczna jest na nich "poświata" liczby, która znajduje się po prawej stronie. Sterowanie pojedynczą liczbą odbywa się za pomocą ekspandera PCF8574 (na schemacie zaznaczone jako A, B, C...), a o tym na który wyświetlacz ona trafi zajmują się 3 rejestry przesuwne 74HC595 (D1...D24 na schemacie). Poniżej załączam schemat. A na zdjęciu poniżej jak to wygląda na wyświetlaczach: Myślałem, że to wina braku kondensatorów przy rejestrach przesuwnych (na początku ich nie było), ale pomimo dodania ich problem nadal występuje. Widać to dobrze na pojedynczym wyświetlaczu w centrum kadru , gdzie powinno być 1, a prześwituje również 2 znajdujące się po prawej stronie. Wyświetlacz ten (również nie wiem czemu) świeci dużo jaśniej niż pozostałe, ale możliwe, że jest innego typu/producenta (wnioskuję po innym ułożeniu pinów). Wspomniany kondensator znajduję się na przy pinie Vcc, a więc możliwie blisko tak jak wskazuje na to dokumentacja układu. Poniżej zdjęcie jego położenia (pierwszy układ to ekspander, dalej 3 rejestry). Całość sterowana jest przez Arduino Uno i jedna z moich hipotez jest taka, że zapis stanu wyjściach ekspandera PCF8574 trwa za długo. Cyfry, które mają zostać wyświetlone, przychodzą z portu szeregowego i są typu string. Napis ten konwertowany jest na tablicę liczb w postaci binarnej, np. 0 to 0b11111100 (czyli 0b[a][c][d][e][f][g][dp]). Każda cyfra jest zanegowana, tak aby na ekspanderze był stan niski, jeśli segment ma zostać zapalony. Poniżej kod, który jest odpowiedzialny za wyświetlanie liczb: //Pin connected to ST_CP of 74HC595 int latchPin = 8; //Pin connected to SH_CP of 74HC595 int clockPin = 12; ////Pin connected to DS of 74HC595 int dataPin = 11; void loop() { //... String stringForDisplay = "181181181123450000"; byte len; byte* bytes = stringToSegment(stringForDisplay, len); /* Zmienna len jest referencją, zwraca długość tablicy. Tablica wyjściowa może mieć mniejszą długość, jeśli w napisie wystąpi kropka - jest ona dodawana do poprzedniej cyfry. */ unsigned long i = 1; for (byte index = 0; index < len; index++) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, i >> 16); shiftOut(dataPin, clockPin, MSBFIRST, i >> 8); shiftOut(dataPin, clockPin, MSBFIRST, i); displayDataLines.write8(bytes[index]); digitalWrite(latchPin, HIGH); i = i << 1; } delete bytes; //... } Każdą sugestię mogę sprawdzić, ponieważ układ aktualnie zmontowany jest na płytce "edukacyjnej".