Stopky - prosba o kontrolu schema

Přeji hezký den.
Chtěl bych poprosit někoho, jestli by se mi někdo mohl kouknout na schéma zapojení. Už dělám třetí desku, ale pořád to nefunguje, různě to bliká, nebo to nefunguje, jak má.
Jedná se o 2xLCD3906 řízené 2xAY0438 a AtMega 8
Projekt je v KiCAD.
Děkuji.
Stopky.zip (45.5 KB)

Projekt je v KiCAD
A to jako každý bastler ví co je to jakýsi KiCAD a má k němu doma plné vybavení?
Nebo po něm chceš aby marnil svůj čas a studoval jeden z milionu XXCADů ??

hod sem pdf.

Dekuji AB za konstruktivni pripominky.
PDF soubory.
PCB.pdf (14.7 KB)
Schema.pdf (94.3 KB)

Programator mas pri testovani odpojeny ? :smiley:
Mozno sa ti to bude zdat blby dotaz, ale ja som tak par hodin nevedel rozchodit moje prve hodiny, ktore mi len divne blikali. Stacilo odpojit programator a bolo to fajn…

xpertvis: Programátor má připojený na jiné piny - tím to nebude.

Za sebe zatím v HW chybu (kromě chybějících blokovacích kondíků) nevidím, vypadá to na chybu v SW.
Asi bys sem měl hodit inicializaci pinů ATmegy a tu část kódu, která zapisuje data do driverů.

Mimochodem - na stopky bych asi raději použil krystal, než interní RC oscilátor.

Jop, ospravedlnujem sa, poriadne som sa nepozrel na schemu.
A co ten C1 ?? Nemas tam privelku kapacitu ??

xpertvis to možná trefil. V datasheetu mají graf závislosti kmitočtu oscilátoru pro kapacity od 20p do 120p. Pokud máš moc velký kondenzátor (už 10n je 83x víc, než mají jako maximmum pro cca 45Hz), pak to bude nepříjemně blikat. To je tak, když se do schématu nezapíší hodnoty součástek…

A pokud nemáš tak malý kondík, tak můžeš generovat kmitočet volným pinem z mcu. Máš jich tam dost. Dopoučil bych OC1A nebo OC1B a využít toho, že čítač umí kmitat pinem bez zásahu programu. Stačí ho na začátku nastavit.

Kondenzator mam 47pF, což by mělo být více než 50Hz.
Vec se ma tak, ze uz jsem to jednou asi pred 3 roky delal a fungovalo to napoprve. Bohuzel podklady odesly do kremikoveho nebe spolu s diskem, tak to dela znova.
Prvni deska co jsem udelal neblika, ale misto aby ukazovala vsechy segmenty zapnute, nebo vypnute, tak se to nahodne meni, skoro to vypada jako chyba v programu. Druha deska ze zacatku taky ukazuje nejake nesmysly a jeste k tomu segmenty slabnou az zhasnou.
Zde prikladam kod, myslim, ze je primitivni a nemela by se v nem vyskytovat zadna zaludnost.
Krystal tam pridam, diky za upozorneni.
Myslite si, ze by bylo lepsi desku si nekde nechat vyrobit aby se vyloucila HW chyba? S fotocestou nemam problem, ale jistota je jistota.
Diky za postrehy a ochotu

[code]
#define F_CPU 1000000UL

#include <avr/io.h>
#include <stdlib.h>
#include <stdio.h>
#include <util/delay.h>

#include “defs.h”

#define load 5
#define clock 6
#define dataIn 7
#define PORT PORTD
#define DDR DDRD
#define del 50

int main (void)
{

uint8_t i;

SETBIT(DDR,load);
SETBIT(DDR,clock);
SETBIT(DDR,dataIn);




for (;;){
	for (i=0;i<64;i++) {
		SETBIT(PORT,clock);
		_delay_ms(del);
		SETBIT(PORT,dataIn);
		_delay_ms(del);
		CLEARBIT(PORT,clock);
		_delay_ms(del);
	}

	SETBIT(PORT,load);
	_delay_ms(1000);
	CLEARBIT(PORT,load);
	_delay_ms(1000);
				
}

return 0;
}[/code]

load by mel bejt v low kdyz posilas data ale to se tyka jen toho 1 zapisu pak uz je to v pohode,co to trochu zrychlit ? 50ms mezi clock je docela hodne, jinak pokud to takle vypada i na zbernici problem bych v tom nevydel

kdysi sem tenhle lcd ovladal primo z uP a pokud byl segment dobre ovladanej tak nesvitil nebo byl cernej, segmen kterej byl spatne ovladanej svitil jen napul popripade blikal nepravidelne…

Ja bych to taky ovladal primo z procesoru - o kurvitko mene, ale ten multiplex si nedovedu predstavit. Muzes naznacit jak to resit, kdyby se vyzkum nepovedl?
Diky

V tomto DS je to hned na druhej strane, ako sa to robi: ww1.microchip.com/downloads/en/DeviceDoc/80438a.pdf
Figure 3.

Myslim ze nemas pravdu. Co jsem pochopil miloPS3 tak to delal bez toho AY. Teorie jak ovladat jeden segment je mi jasna, ale Mega8 nema dost nozicek na to aby ovladala 64 segmentu, tudiz tam musi byt nejaky multiplex. Anebo ovladal jenom jedno pole, na to nozicky staci. Asi predelam desku tak, ze budu ovladat kazdy display zvlast, nebo to udelam na nejake laboratorni desce pres dratky.

aha, ja som myslel ze ti nieje jasne, ako pracovat s liquid crystal display-om, preto som poukazal len na figure 3 v tom datasheete.
co ja mam disp, tak ten ma pre kazdy digit zvlast backplate (alebo ako to nazvat), takze som to riesil ako pri led display, tj. multiplexom. Prepinanie medzi jednotlvymi digitmi som mal dajme tomu 50Hz, a toglovanie medzi segmentom a backplate-om 4x viac ?

Použité displeje mají jenom jeden BP (i když na 2 pinech), takže je nelze multiplexovat. Ten obrázek 3 ukazuje, že segment, jehož pin kmitá ve fázi s BP “nesvítí”, segment, který bliká v protifázi “svítí”, což víš. Poslyš - nehaž flintu do žita, když už jsi investoval tak veliký peníze do AY, tak je přece nehodíš jen tak do šuplíku. Já buzení vyřešil pomocí řetězu obvodů 74595, ale je tam nevýhoda, že musíš displejema kmitat pomocí dat z MCU. Tady máš generátor po ruce a data v podstatě shodná s těma 74595-kama. Ověř si, jestli kmitá signál pro BP, propískej si spoje, jestli nemáš nějaký přerušený nebo vyzkratovaný. Pokud Ti BP nekmitá, tak zkus přehodit IO mezi sebou (jestli je máš v paticích). Pokud ne, tak vyřaď kondík a připoj vstup na OC1A nebo OC1B procesoru, nastav čítač a ať Ti kmitá signálem časovač. Nastav čítač na čítání, OCR1A nebo OCR1B nastav na 0x7FFF, naforcuj OC1A nebo OC1B na pin a pusť čítač. Pak si znova projdi signály pro BP, jestli kmitají. Pak se ozvi, jak to dopadlo a zkusíme postoupit dál.

Sakra.psal sem na PSku a kdys sem to měl omylem sem to cely smazal,mezitím mě Balu predbeh se stejnou myšlenkou.
Jinak sme se špatně pochopily,psal sem na lcd,tj 1ks,žádný multiplex,bylo dost pinu

Diky kluci. Zkusim vsechny rady. Jenom bez osciloskopu to kmitani BP asi nezmerim, co?

Vezmi si k ruce třeba logickou sondu. Jak rychle to kmitá Ti může být v podstatě celkem jedno. Provizorně si můžeš detektor kmitání vytvořit pomocí jednoho hradla, 2 LEDek a 2 odporů. Zapojíš VCC-R-LED-LED-R-GND a mezi LEDky zapojíš výstup z hradla. Hradlo použiješ jako oddělení LEDek od signálu. Na vstup hradla přivedeš signál a buď bude svítit jedna nebo druhá (když to nebude kmitat). Pokud ano, budou střídavě blikat. Když to bude dost rychle, budou obě svítit.

Malá oprava : Forcování OCR na pin se mi nějak nepodařilo rozchodit, tak raději nastav čítač na PWM režim. Ve výsledku je to úplně jedno - pro Tebe je důležité, že čítač bude kmitat pinem sám a s výjimkou počátečního nastavení se o něj nemusíš starat v programu.

Tak jsem si udělal jeden display s řadičem drátkama a kupodivu to funguje. Problém je tedy asi ve fotocestě.
Nicméně chtěl bych poprosit o radu v programování.
Měl jsem v úmyslu použít typ uint32_t k nastavení/reset segmentu na displayi.
Používám gcc 3.4.1061 a mám takový problem
když použiji tento kousek programu

uint32_t temp;
temp=0;
temp |= (1<<7);

tak vse funguje nastavi se sedmy bit v promenne temp (kontrolovano pres debbuger)
Pokud vsak pouziji

uint32_t temp;
temp=0;
temp |= (1<<30);

Tak se 30-ty bit nenastavi. Nevite co s tim? Mit 4 pole byte se mi moc nechce.
Dekuji