Fórum témák
» Több friss téma |
As fare as I can understand the code...
In display.c there is a strange statement:
The StrobeReset() sets shift_pos to 0, and each StrobeClock() increments it. As we are interested to display "-22.5°C" the character when shift_pos==3 is the second digit of degree (2!=11) this statement corrupts the data displayed. This statement is used to eliminate the segment A of character :. Are there only 6 digits on the display? So let us eliminate the semicolons from date, use only the WriteOutput(data); from the instruction...
Yes display have 6 digits.So what I must to write?
Try the two files in this packet...
It's not good,now I don't have the last two digit on display,clock do not show correctly --other is also bad.
Sorry, i misunderstood the program...
I think i found it.... There are two non digit position is the display, on which only the semicolon can be used... Points use the digits internal decimal points. In the message to display is "-22.5°C" the shift_pos == 3 is the position of second 2 with a point in the next position. The display.c looks for points in next position, and combines the data of two characters. At the positions of semicolons moves the actual position backward one position if the current character isn't a semicolon. The problem occur when a character is at shift_pos==3 or shift_pos==6 and a point is in the next position like in "-22.5°C". In this case the act_pos has to be moved bacward by two positions... I had to add some lines to m_DS1621M.C to make it compatible with MpLab Simulator (No hardware I2C simulation support).
Great jobs!!!Congratulations!!!
Many thanks my friend.Now everything work fine.(You mist to write `C in temperature when measure in + range) I write my self no problem.I am also change....... if (dcf_time.HasNewTime) { dcf_time.HasNewTime = false; Ticker = TIMER1_FREQUENCY; time = dcf_time; time.sec = 1; ------------- changed to 0!!! Now the clock show precisely second's. Also added gong on every hour's from 7-22h(1s output hi on pin B7) Thanks to all on forum
Ha a hőmérséklet negatív és két egész számjegye van pl. "-22.5°C", akkor a program hibásan működik:
- A kijelzendő információban 7 karakter is szerepel (a pont nélkül), mert a °C előtt egy betüköz is van a programban. Negatív hőmérséklet esetén a betüköz nem kell. - A kijelzőn két hely van a kettőspontok számára, ezeken a helyeken más karakter nem jeleníthető meg. A pontokat a digitek tizedespontjával jelzi ki az óra. A display.c megvizsgálja, hogy az aktuális karakter után pont következik, ha igen, akkor a karakter képét módosítja. Amennyiben a shift_pos == 3 vagy shift_pos == 3 pozíciónál vagyunk és a kijelzendő karakter nem a kettőspont, a kimenetre 0 -t ír és visszalépteti az act_pos változót 1 -el. A probléma akkor jelentkezik, ha a shift_pos == 3 vagy shift_pos == 3 pozíciónál nem kettőspont van és a következő karakter pont. Ekkor az act_pos változót 2 -vel kell visszaléptetni. A kijelző adatainak előállítása egy kínszenvedés a programnak a kép buffer és a fent leírt problémák kezelése miatt. - Jobb lett volna egy karakter mutatót összeállítani a bufferbeli adatok címzésére - nem minden műveletnél vizsgálni, melyik az aktív buffer... - A beírásnál fixen 8 kódot lehetett volna beírni, a bont jelzésére a karakter kódban a 7. bitet lehetett volna használni...
I solved it:
Sziasztok
Vannak nagy kijelzőim extra nagyok ha valakit érdekel méretei 178X120X34 jelenleg közös Anódos de át lehet forrasztani akár katodosra is előtét ellenállások be vannak épitve így eg szegmens 12V 23mA megy nagyon jó fénye van és mesziről látszik . Ha valaki igazán nagy kijelzős órát akar épiteni akkor ezeket ajánlom ilyen nagyokat nem vesz sehol eredeti japán termék. A képeken minden jól látszik. 3500Ft os darab áron eladók van több darab is érdeklödj !!!!!
APRÓHIRDETÉS!
Tessék használni, ez fórum!
szia
De nekem nincsen ilyen opcióm hogy új hirdetés feladása, vagy én vagyok béna
Igen, olvastam.... de hol itt a 46. elem???
Az aktivitásod nem éri el a 0.15-öt. Hamar el tudod érni, ha napi 1hsz.-t írsz.
Hár ez az.... A 46. elem már program kód!
Idézet: „A probléma akkor jelentkezik, ha a shift_pos == 3 vagy shift_pos == 6 pozíciónál nem kettőspont van és a következő karakter pont. Ekkor az act_pos változót 2 -vel kell visszaléptetni.” De az eredeti kód csak 1 karakterrel lép vissza, a következő kijelző frissítésnél a pontot találja meg. Ezzel a kóddal ("." kódja 0x2E = 46) címzi meg a 14 elemű táblázatot. A CCS fordító tudja csak hova is ugrik a kontroller.
Kösz, értem. Bár eddig még nem sikerült megoldani hogy beleszaladjon. Ez olyan "elvileg előfordulhat" hiba, de azt azért mindenkinek tudni kell hogy alapszabály hogy ha szemét megy be, szemét is fog kijönni.... ha kijön valami egyáltalán.
Ha a bufferbe írást megoldod hogy ne mehessen bele csak ketőspont (nem nagy mutatvány) ez a hiba - ami valós hiba - soha nem fog bekövetkezni. Mindamellett igazad van.
Nem ilyen egyszerű a helyzet...
Pont digit99 szaladt bele a "-22.5°C" kiiratásával. Ebben a szövegben a (shift_pos == 3) pozíció a hőmérséklet egyes helyiértékén álló "2", ami után közvetlenül a pont jön. Ezért volt a megzavarodott kijelzése. Ráadásul a hőmérséklet kiíratása változó hosszúságú (negatív hőmérsékletnél a megjelenik a "-", -0.5 .. -9.5 fok között az egész rész csak 1 számjegy, -10 fok alatt pedig 2), így ez a hiba csak -9.5 fok alatt jelentkezett. Célszerű letölteni az MpLab CCS plugin -t. Csinálni egy projectet a fordításhoz és nyomonkövetni mi is történik...
Azért némi odafigyeléssel megoldható a dolog. Olvastad?
Persze igazad van abban hogy nem ez a megoldás, de nekem kiválóan működik. Újra lehetne gondolni (talán még érdemes is volna) az egész kijelző rutint. Topi mester mentségére legyen mondva, hogy ezt a kütyüt bevallottan szobai használatra tervezte, ahol ha már -9,5 fok alatt vagy 99.5 fok felett van a hőmérséklet, akkor már a kijelzés hibája a legkevésbé fontos paraméter Persze az is igaz, hogy az kéne hogy legyen a cél hogy törekedjünk a tökéletes megoldásra. Ezesetben nem jött be. Mindamellett én csak egy ilyen készüléket "gyártottam" le, az már 3 éve stabilan ott figyel a falon és semmi bajom nincs vele, kivéve a multiplex kijelzést. Az újabb kütyükben már eleve nem ezt a megoldást használom - soros shiftregiszterek PWM szabályzással, kevesebb láb, nagyobb fényerő, megbízhatóbb működés, nincsenek felesleges bufferek stb.... - talán ezért is értetlenkedtem egy kicsit.
Üdv mindenkinek!
Elkészültem a topi féle óra egy újabb példányával, de .... amíg a kijelző rá nem került, szépen szinkronizál ahogy kell, de amint a kijelző rákerül megszűnik a dcf vétel, vagy semmi nem jön, vagy valami látványos űrszemét (egy led jelzi a dcf jeleket, így ha nics kijelző látom mit csinál, egy másik led pedig jelzi ha szinkronizált). Ha a kijelzőt lehúzom, az első egész dcf percben szinkronizál, de amint rádugom a kijelzőt megzavarodik. Már mindenhol próbáltam 100nanokkal szűrni, tettem a tápra puffer kondit is és 100n-t is, de semmi. Olyan mintha az RF rész zavarná meg. Valakinek van ezzel tapasztalata?
Újabb fejlemények, hátha ez valakinek információ értékű.
Véletlen rajtahagytam a nyákon a pickit2-t, és lőn csoda, az óra szinkronizál, a dcf vétel jó.... Az RB6, RB7 lábakon nincs semmi, azt csak a programozásra használom, maradt a táp... de mit tud a pickit???
Mondjuk stabil tápfeszt? Lehet, hogy megfogja a tápon megjelenő ugrásokat, amik kibillentik a szinkront...
7805-ről megy az 5V-os rész. Mindkét oldalon 100n-val, a 12V-on 1000u az 5v-on 10u puffer.
Ötletem nincs hogy hogy kéne szkóp nélkül megnézni... Tovább kutakodtam a hiba oka után, most ott tartok, hogy elég csak az égető GND-jét a nyákra kötni és a hiba már meg is szűnik. Csak az oka és a megoldás ami még miniíg rejtély. gerjedés? de hol? Ami a táp stabilitást illeti a DCF vevőt hajtottam már külön elemröl is (az azért elég stabil), a jelenség ugyan az volt.
A DCF77 vétellel a következőket tapasztaltam:
- Milyen messze van a vevő minden elektromos berendezéstől - legalább fél méter kell. - Jó irányban áll - München felé mutató irányra merőlegesen, vízszintesen álljon. - Van - e az irányban TV, fénycsőlámpa stb bekapcsolva. A modul csatlakozóira szereltem a + táp elé egy 100 ohm -os ellenállást és a + és - pontok közé 100nF és 47µF tantál kondenzátort. A kimenetet 10k -val húztam a szűretlen tápra. A vezeték árnyékolt vagy sodrott érpár legyen. A modul kimenete nyitott kollektoros, a legjobb lenne közvetlenül a modul kimenetén egy buffert alkalmazni. A program minden másodperc elején 2 mintát vesz 150 ms -enként és ezt dekódolja. Így nekem sohasem működött a vétel... Egy szűrést kellett tennem a vevő benetere. 200us -onként mintát veszek, 20ms -ig átlagolom a mintákat, majd a 20ms átlagokból jövő sorozatot dekódolom. Általában 80% fölötti a helyes dekódolás, sokszor 100% -ot is eléri.
A hiba nem a programban van, mert mint említettem ha a kijelző nincs rákötve, vagy a PICKIT rá van csatlakoztatva a nyákra - ekkor már a kijelzővel együtt is - teljesen jó a szinkronizálása, egy órán át néztem, minden percben szinkronizált, így mindenképp valami gerjedésre gyanakszom, de erre alkalmas műszerek hiányában nem tudom kimérni.
Ha a PICKIT nincs rácsatlakoztatva (a legutóbbi tapasztalatok szerint elég csak a GND-t csatlakoztatni) a bejövő dcf jel tele van űrszeméttel, vagy van vagy nincs.
Szerintem a PC GND-jét viszi a DCF GND-jére és emiatt ad kvázi árnyékolást. Próbáld meg összeföldelni egy kábellal, pk2 nélkül.
Igen, ez a gyanúm nekem is, de azért jó lenne ha PC nélkül is működne....
|
Bejelentkezés
Hirdetés |