Fórum témák
» Több friss téma |
Kezdőként a könnyebbik utat választottam. A rosszabbikat. Gondolván, hogy az az egymillió beírási lehetőség az milyen sokáig elegendő. Persze, hogy minden gombnyomást tárol. De már átlátom a program működését és pikk-pakk meglesz a "tárol" gomb is.
Az, hogy milyen színű a LED az részletkérdés, de köszi az észrevételt. Megfogadom.
Szia!
Nem értek flowcode -ul, de még azt is be kell állítani, hogy a CCP láb bemenet legyen, a CCP modul a timer1 -et (és nem a Timer3) mentse a CCPR regiszterekbe.
Én még mindig nem értem mit csinálsz a Timer1h-val, vagy az egy saját változó, amit feltöltöttél előtte a ccpr1h-ból? Nem túl szerencsés elnevezés, megtévesztő. Ha viszont a valós timer1h, vagy abból lett feltöltve, akkor abszolút nem ezt kéne csinálni! Fene ezt a Flowcode megoldást, hogy a regiszerek nevét kicsivel írják! Teljesen összezavar mindent!
A programot csak délután tudom megnézni... Megszakítást csak akkor kell letiltani, ha két megszakítás között nem tudod lekezelni a folyamatot. Egyébként a CCP1 megszakítását a PIE1.CCP1IE bittel lehet engedélyezni, tiltani. A Timer1-et nem kell megállítani, vagy megszakítását tiltani, csak a mérés kezdetekor esetleg nullázni és törölni a megszakításokat számláló számlálót, hogy legyen idő a mérést megkezdeni, ne fusson be egy Timer1 megszakítás, mondjuk két órajel múlva. A többi megy magától. A PWM is futhat folyamatosan, mivel a Timer2 van hozzárendelve. A második mérőjel után mindenképpen van idő a számításokra és a következő mérésre felkészülni.
A Timer1 -et jobb nem piszkálni. ld.: Timer1 errata.
Én is amellett vagyok.
Viszont te hogyan kerülnéd el azt a helyzetet, hogy bejön a CCP1 megszakítás, ekkor törölni kéne a megszakításokat számláló számlálót. De mi van, ha a CCP1 megszakítása lekezelése közben csordul túl a Timer1 is? Bár ha a Timert a CCP után kezelem le a megszakításban, akkor ez meg is oldott, talán... ?? Másik kérdésem, a Timer3-al is ilyen gondok vannak? A hozzászólás módosítva: Nov 26, 2012
Ez a kulcs kérdése a felbontás növelésének. Egy megszakítási szintre kell tenni őket, ekkor ha egyik kér, a másik már nem tudja félbeszakítani. Ha a CCP megszakítás érkezik előbb, akkor a CCP már tárolt, a timer1 (timer3) pedig lép tovább. Ha a timer fordul át hamarabb, akkor 0 -ról indul újra a számítás és később tárol a CCP. A probléma csak akkor jelentkezik, ha a megszakítás kiszolgálása alatt, vagy addig, amíg a kiszolgálás eljut az ok kiderítéséig a későbbi kérés is befut.
Timer3 ugyan olyan egység, mint a Timer1. Külön erratát nem találtam, de nagyon sok típus errata -ban együtt szerepel a Timer1 / Timer3.
Ha a CCP1 kiszolgálása közben csordul túl a Timer1 és töröljük a Timer1 túlcsordulás számlálót az nem okoz bajt, mert a kiszolgálás után rögtön ráfutunk a Timer1 kiszolgálására is, azaz a következő méréshez meg lesz a túlcsordulás pontos száma. Ha a Timer1 megszakítás kezelése közben fut be a CCP1, akkor pedig szintén ott lesz a megszakítás száma, amikor a Timer1-el végezve szinte azonnal a CCP1 megszakítására lépünk. Szerintem ezt az egészet folyamatos Timer1-el ki lehet szolgálni, főleg, ha a mérő freki 1Hz! Ha olyan magas frekit mérünk, amivel a Timer1 hamarabb túlcsordul, mint amennyi idő kellene a megszakításba való visszalépéshez, akkor le kell mondanunk erről a frekiről! Nem számolgattam, de szerintem ez a freki fizikailag sem fér be a Timer1 portján, úgyhogy nem lesz gond.
Még nincsen készen, de már látni valamit.
Most néztem bele a programba. Nagyon fontos, hogy a Megszakítás blokk egy csomó regisztert beállít, ha valamit máshogyan akarnál beállítani, akkor azt utána kell kiadnod a C kódban, vagy módosítani kell a blokkon belül egyedi kóddal.
A ccpr1x regisztereket nem szabad írni, semmi értelme. A timer1x regeket szintén ne piszkáld. A timer2 megszakításban nem tudom mit szerettél volna, de ha nem tévedek ütközik a CCP1 megszakításban történtekkel.
Néhány építő észrevétel. Egy Feltételes elágazásnál ha két hőfokot összehasonlítasz és az egyik ágba teszed, hogy a Relé bekapcs, akkor a másik ágba teheted, hogy a relé kikapcs, nem kell neki még egy Feltételes elágazást csinálni, mert ez felesleges programmemóriát pazarol és amúgy sincs logikai értelme.
Az Ok a Gomb nevében nálam az Oké gombot jelölte, van még Menu, meg Plusz, Minusz stb. Adj beszédes neveket a változóknak, meghálálják! Néztem a gombok detektálását a Timer0-ban, nem biztos, hogy megértetttem mit szeretnél...
Azért tettem külön mert így más más hiszterézist tudok beállítani melegedéshez, lehűléshez.
Memória az van még csak 7%-ot foglal a program. gombnevekkel nem foglalkoztam igazán. Csak összelapátoltam, hogy lássam merre mennyi? A fel gombbal növelem a hőmérsékletet, a le gombbal csökkentem. Az OK tárolja a beállítást
Már látom hogyan oldottad meg, nem rossz! Egy hátránya van, hogy egyszerre csak egy gomb lehet lenyomva, de ez a legtöbb esetben nem gond.
Korábban már jeleztem, hogy nem szabad meghívni egy olyan rutint, amit a megszakítás is meghív, mert akkor a megszakításnak nem sok értelme lesz és az adatok is össze vissza keveredhetnek! Az is kifogásolható, hogy rengeteg blokkot használsz fel és tele van ugrásokkal.
Az is problémás, hogy végül is nem a Timer megszakításban döntődik el, hogy a gomb meg van-e nyomva. Emellett, ha valahol leragad a program, pl. a hőn szeretett Delay blokkok használatakor, akkor az int értéke külön életre kel. Az is gond, hogy a 15Hz-es Timer0-al is nagyon gyors a szimuláció a valóságban ez nem működik szerintem. Ha a kiírt feladat szerint nézzük, akkor nem teljesül a fő programszáltól való gomb detektálási függetlenség és a kevés blokk felhasználás. A többi említésre kerülő kifogás, csak hab a tortán. De ne add fel!
Sziasztok.
Szeretnék több DS18B20-as szenzort bekötni egy picre. Hogy tudom beazonositani illetve hogy lehet beállitani hogy minden eggyes szenzorhoz más változó legyen rendelve?
Szoval gombok kezelesere mutatok egy egyszeru, es rugalmas megoldast (hatha nem leszek ledorongolva mert megint C)
Van nekem egy bott.h allomanyom, ami lekezeli a gombok allapotat, es visszaad egy erteket a gombok allapotatol fuggoen:
Hibás a Timer1, erről esett szó, ezért nem érdemes birizgálni, csak fejtörés lesz belőle. Had menjen, úgy is működnie kell a folyamatnak.
Felesleges erőfeszítésnek látom, hogy pontos 1Hz-et akarsz készíteni. Mindegy mennyi, csak tudd, hogy mennyi(esetleg egy hiteles periódusidőmérő?)! A többi számítás kérdése. A jelenlegi programban már jó sorrendben állítod be a Timer1-et? Tedd fel, hogyan akarod a PWM-et beállítani, mert így nem tudom mitől mehet gyorsabban.
Az one wire blokkban be lehet állítani, hogy hány db eszközt keressen a vonalon. A makróhívásokban indexelve kellene megjelenjenek. Minden mást a blokk makrója megold, elvileg. Nekem is csak egy darab van, már bánom, hogy csak egyet rendeltem, nem túl olcsó...
Szia! Sajnos ezért nem tudok tudáspontot adni, de ha átfaragod a topic témájának megfelelően Flowcode-ra, akkor dupla tudáspont jár!
Viszont itt az apróban valaki hirdeti 400ft/db áron
levélben 200ft ért elmegy bárhová az országban
Nekem is így működik, neked miért nem? Timer1-et nem állítom le, csak minden második CCP1 megszakítást figyelek. Ezt neked nem kell, mert nálad a mérőjel megy a CCP1-re. A Timer1 csak had számláljon, neked csak az első mérőjelnél el kell menteni, nullázni a Timer1 megszakításait számláló számlálót, majd várni a második mérőjelet, ekkor ugyanezt megcsinálod, kiszámolod, amit ki kell és innen folyamatosan forog az egész magától. Ha nem csinálod meg, majd én megcsinálom, csak most sok más dolgom van párhuzamosan...
Ez egy +-2C pontos analog szutyok. Azért a DS-el nem lehet egy lapon említeni, az árán is látszik!
De! Akkor inkább az SPI-s változatok(TC77), azok csak 1fokot tévednek, nem 4-et, mint a 9700-as sorozat.
A hozzászólás módosítva: Nov 26, 2012
Nem -De denem dede
A hozzászólás módosítva: Nov 26, 2012
Szerintem hagyjuk... Egyébként 25C-on 1fokot lóg, de 0..70 között 4-et, ami elfogadhatatlan...
Adatlap 9700 A hozzászólás módosítva: Nov 26, 2012
Végig kell kapibrálni, mert nem tudod hol mennyit merre csal. Inkább kiadok érte 700Ft-ot(ennyi a HQ-ban) és kapok 0,5C lógást! Egyébként meg a TC77-et használom, mert olcsó és jó 1méteren belülre. A DS-t nagyon messzire is el lehet vinni!
Nem tudom neked miért jött be hiba, én nem várakoztam utána semmit, és jó lett. A hozzászólás módosítva: Nov 26, 2012
|
Bejelentkezés
Hirdetés |