Fórum témák
» Több friss téma |
Fórum » PIC programozás
Szia!
Gondolom PICKit2 -vel programozol... A programnak van egy kis problémája az All protect felirattal... - Indítsd el a PICKit2 kezelő programját, ismertesd fel a kontroller, majd Erase. - Lépj ki a programból és indítsd el újra, ismertesd fel a kontroller, majd Read. Nicsak nincs többé All protect...
Hihetetlen! És működik
![]()
Üdv Mindenkinek!
PIC16F819-el szeretnék AD konverziót csinálni, de valahogy nem működik, pedig egyszerűnek tűnik az adatlapján. Itt a prg-részlet: konf: BANKSEL PORTA ;bank 0 kiválasztása CLRF PORTA ;porta törlése CLRF PORTB ;portb törlése MOVLW B'01000001' ;Fosc/8, A/D enable, analóg port RA0/AN0 MOVWF ADCON0 BANKSEL TRISA ;bank 1 kiválasztása MOVLW B'10001111' ;adress right justified(eredmény ADRESL-ben+ADRESH 0,1 bit), port beállítások leírása fenn!! MOVWF ADCON1 ;ha B'0*** akkor left justified, 6 legkisebb bit ADRESL-ben nulla!! MOVLW B'00011111' ;RA bemenet-kimenet beállítás(0-kimenet, 1-bemenet) MOVWF TRISA CLRWDT MOVLW B'10000111' MOVWF OPTION_REG ;felhúzóellenállásokok tiltva CLRF INTCON ;interruptok tiltása MOVLW B'00000000' MOVWF TRISB ;RB kimenet-bemenet beállítás(0-kimenet, 1-bemenet) CLRF PIE1 CLRF PIE2 MOVLW B'00000001' MOVWF PCON MOVLW B'00000000' ;hangolás alap MOVWF OSCTUNE MOVLW B'01000000' ;oszci 1Mhz-en MOVWF OSCCON BANKSEL PORTA ;Bank 0 kiválasztása MOVLW B'00000000' MOVWF CCP1CON CLRF _MER ;_MER törlése a konverzió részlet: meres1: CALL ido1 BSF ADCON0,GO ;A/D Conversion start varas: BTFSC ADCON0,GO ;vagy ![]() GOTO varas MOVLW ADRESL ;eredmény olvasása(első 8 bit - 0-7.) MOVWF _MER ;eredmény írása _MER-be BSF PIR1,ADIF CALL ido1 MOVLW _MER MOVWF PORTB ;eredmény kiírása PORTB-re(binárisan) GOTO meres1 Megszakítást nem használtam. Így mindig 11001100 az eredmény.(PORTB-re kiíratva). Mit nem csinálok jól?[b]
Jo lenne ha hasznalnad a code gombot, vagy mellekelned a ASM filet. Mellekletben egy lehetseges megoldas.
Üdv!
Még nem volt időm átnézni teljesen, de csatolom az enyémet. Gondolom, csak a konf. ill a meres1 .rész a lényeg. A többi részben vannak dolgok, amit egyszerűbben is meg lehet írni, pl a villogtatást. A BSF PIR1,ADIF sor valószínű nem kell, csak megszakítás esetén.
Üdv!
Lehet, hogy az ADCON0 regiszter beállításával lesz a gond? 6., 7. bit? Integrált oszcillátort használok 1MHz-en. Maga a konverzió úgy nézem ugyanaz. A BSF PIR1,ADIF sort törlöm. Nekem közben több szoftveres időzítés van, de gondolom ez nem befolyásolhatja. AZ RA0 bemeneten egy 100nF-os kondi van és egy 10k-poti ossza le egy TL431 jelét.(2,47V). A poti csúszóérintkezője a bemeneten. A +vref a 2,47V-on, a -vref a testen. Így működhet?
Nem neztem mindent at, de talaltam hibat:
Te a movlw parancsot hasznaltad, igy a w-be a adresl cime kerul, nem a tartalma. a portra irasnal ugyanez a helyzet.
Üdv!
Köszönöm! Akkor biztos ez volt a hiba. Mindenhol movlw-t használtam, így a PORTB-n mindig a címet írta ki, nem az értéket. Azért volt mindig ugyanaz az eredmény. Ki is próbálom a próbapanelen, addig nem változtatok a frekin. Üdv! Tomi
Üdv!
Így működik, de csak az első kér bit változik a bemenő fesszel arányosan. Csak a felső két bitet mutatná? De nem csak a poti végállása felé világítanak a ledek, hanem arányosan, mintha csak két bit lenne a felbontása. Na majd még holnap próbálkozom. Köszi mindent. Üdv! Tomi
Nem csodalkozom rajta. Te a Bank0-ban olvasol, tehat a ADRESH-t a 0x1E cimen. A ADRESL olvasasahoz bankot kellene valtani. De nincs problema, csak a ADFM bitet kellene 0/ba tenni az ADCON1 regiszterben, es igy az ADRESH-ban lenne az AD ertek felso 8 bitje.
Tehat:
Igy mar jonak kell lennie.
Üdv!
Így már működik a dolog. Köszönöm. Van még mit tanulnom, erre nem is figyeltem, hogy a bank0-ban olvasok. Mégegyszer köszi!! Üdv! Tomi
Sziasztok!
Szeretném megkérdezni, hogy van-e valami okos megoldás arra, hogy ha több nyomógombot akarok kezelni, (pl: K1 indítja futófény rutin 1-et, K2 a 2-őt és így tovább) ne kelljen várakozni amíg lefut, hanem amint megnyomom a K2-őt program 1 futása közben egyből váltson át program 2-re, és így tovább... Vagy megszakításokban gondolkodjak? ![]()
A megszakítás is lehetőség, de megoldható úgy is, hogy miközben fut, akkor is kérdezed a gombokat ( a késleltetés közben ) és megnyomás esetén befejezed az aktuális ütem futtatását és visszatérsz a döntési helyre ( persze előtte már bekapcsoltad a megfelelő ütem jelzését! ) .
Steve
Nem az lenne a legegyszerűbb, ha gomb lenyomása esetén a program előlről kezdene mindent, vagyis a 0 címre ugrana?
Szia! Az csak egy egyszerű reset nem? :yes:
Arra gondolsz hogy a rutinokban is (két villogás között) is vizsgáljam a nyomógombot? Vagy adattáblákat kéne használnom, nem rztinokat, és úgy két retlw visszatérés között? Vagy nem tudom melyik lenne a jó.. :/
Igen. Amennyit én felfogtam a problémából, mindig az utolsó parancs érvényes, tehát gomblenyomáskor reset, és a megfelelő feladat végrehajtása, függetlenül attól, mik voltak az előzmények.
![]()
Igen így valóban megoldás lehet
![]()
Egyértelmű, hogy ha érzékelni akarod az eseményt, akkor időt kell szakíts rá! Simán belefér a többi közé, ha jól illeszted, kezeled!
Resettel alaphelyzetbe hozni egy programot üzemszerűen? Vagy valamit nem jól értek?
Kicsit fapados dolog a resetelés.
Egy régi vicc jut erről eszembe: 1. feladat: főzzön teát, ha adott egy rezsó, egy kanna, stb. Fizikus: Vizet töltök a kannába, bekapcsolom a rezsót, blabla... Matematikus: (Elmondja ugyanezt) 2. feladat: Főzzön teát, ha a rezsó már be van kapcsolva! Fizikus: Vizet töltök a kannába, s a rezsóval már nem kell foglalkozni... Matematikus: Kikapcsolom a rezsót, a feladatot ezzel visszavezettem az előző megoldára. Hát ez a resetelés is kb. ilyen megoldás.
A fizikus ott követi el a hibát, hogy nem ellenőrzi a rezsó állapotát.
Egy programozó ellenőrizné: - be van kapcsolva a rezsó? - melegedik a víz? - elérte a szükséges hőfokot elvárható idő alatt? Ha nem
![]()
De itt három gomb lenne és három funkció. Valamint meg lehet oldani simán programból, hogy azt csinálja amit akarsz. A reset melyik gombra menne?
![]() ![]() Írtam már pár programot, egyikben sincs reset. (Kivéve watchdog, de az nem történt még meg, hogy működésbe lépett, csak jó ha van, mint a kőszáli sas!) ![]()
Sziasztok!
Meg szeretnék tanulni picet programozni. Nem tudtok ájanlani esetleg valamilyen weboldalt, könyvet , tananyagot, ami az alapokkal kezdi és a végén úgy tudok megírni egy led villogtató progit , hogy tényleg minden lépést értek ? Köszi a választ.
Remeljuk, nem az lesz a palyad csucsa.
![]() Elso kerdes: programoztal-e mar barmilyen nyelven? Ha igen, nem lesz nehez. Masodik: foglalkoztal-e mar legalabb alapszinten elektronikaval? Ha nem, nehez lesz.... ![]() Igen programoztam már c-be c#-ba java-ba és foglalkoztam már az elektronikával.
Sziasztok!
Eljutottam odáig, hogy adattáblát kelljen használnom, de kicsit belekavarodtam a dolgokba, mert több példát átnéztem, és szinte mindenhol máshogy kezelik az adattáblát....Az lenne a kérdésem, hogy mik a leg alapvetőbb lépések, hogy az adattáblát kezelni tudjam? magát a táblát nagyjából értem hogy a programszámláló értéke szerinti sort tölti be elvileg... Viszont nem tudom, hogy hogyan kezeljem a táblát a főprogramban... ![]()
Nézz szét a honlapomon!
PICCOLO projekt PICula projekt PIC-kwik projekt Nézz szét Juhász Róbert honlapján: Az assembly programozás alapjai Az MPLAB 8.1 leírása Nézz szét a Közepes teljesítményű PIC mikrovezérlők Felhasználói Kézikönyvében! Nézz szét a Microchip honlapján! Nézz szét a Mikroelektronika honlapján! |
Bejelentkezés
Hirdetés |