Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   94 / 118
(#) Dempsey hozzászólása Dec 1, 2013 /
 
Sziasztok!
Szeretném kérni a segítségeteket egy Pic16f877a-val kapcsolatban. Azt szeretném elérni, hogy a timer1 egy külső 3,2786Mhz-es kvarcról menjen, de nem jön össze, belső oszcival viszont működik.
  1. #include "16f877a.h"
  2. #fuses hs,NOWDT,NOLVP,NOPUT,NOBROWNOUT
  3. #use delay(clock=20Mhz)
  4. #define preload 55296
  5. int16 i=0,k=0;
  6. boolean j=false;
  7.  
  8. #INT_EXT
  9. void rb0_isr(){
  10. if (!input(pin_B0)){
  11. j=true;
  12. output_high(pin_d0);}
  13. }
  14.  
  15. #INT_TIMER1
  16. void timer1_isr(){
  17. set_timer1(preload);
  18. if(j==true){
  19. i=i+1;
  20. }
  21. }
  22.  
  23. void main (void){
  24.  
  25. enable_interrupts(INT_EXT);
  26. EXT_INT_EDGE(H_TO_L);
  27. setup_timer_1(T1_EXTERNAL|T1_DIV_BY_8|T1_CLK_OUT);
  28. enable_interrupts(INT_TIMER1);
  29. enable_interrupts(GLOBAL);
  30. for(;;){
  31.  
  32. if (i>=100){
  33. k=k+1;
  34. i=0;
  35. }
  36. if(k>=1){
  37. output_high(pin_d1);
  38. }      
  39. }
  40. }

Milyen beállítás hiányozhat még vajon? Köszönöm a segítséget.
(#) potyo válasza Dempsey hozzászólására (») Dec 1, 2013 /
 
A timer1 oszcillátor nemis fog ekkora kvarccal menni. Az 32,768kHz frekvenciájú kvarchoz van méretezve.
(#) Dempsey válasza potyo hozzászólására (») Dec 1, 2013 /
 
Igazad van,de ezt tudtam is, csak sajnos rossz kvarcot szereztem be és most felnyitottad a szemem. Köszi szépen.
(#) djsms hozzászólása Dec 6, 2013 /
 
Elkezdtem játszani a nokia lcd-vel, de egyelőre nulla sikerrel
Innen vettem a kódot.
A mellékelt kép alapján a következőképp kötöttem be a 16f676-ra:
  1. #define nok_sclk  PIN_C2
  2. #define nok_sda   PIN_C1
  3. #define nok_dc    PIN_C0
  4. #define nok_cs    PIN_A2
  5. #define nok_res   PIN_A1

Próbapanelen játszok, az lcd 1-es lába a pic 12-es lába (RA1)
aztán CE-RA2, DC-RC0, DIN, RC1, CLK-RC2
Jól párosítottam?
A kódrészlet beillesztésén kívül ennyi a programom:
  1. #include <16F676.h>
  2. #FUSES NOWDT                    //No Watch Dog Timer
  3. #FUSES NOBROWNOUT               //No brownout reset
  4. #use delay(internal=4MHz)
  5. ...
  6. bemásolt és lábkiosztásnak megfelelően átírd kódrész
  7. ...
  8. void main()
  9. {
  10.    while(TRUE)
  11.    {
  12.       delay_ms(1000);
  13.       nokia_init();
  14.       delay_ms(1000);
  15.       nokia_gotoxy(5,5);
  16.       printf(nokia_printchar,"test???");
  17.    }
  18. }

Az lcd-n viszont még csak egy pixel sem jelenik meg
A hozzászólás módosítva: Dec 6, 2013

nokialcd.JPG
    
(#) sysy válasza djsms hozzászólására (») Dec 7, 2013 /
 
A PORTA alapvetően (power reset után) analóg üzemmódra vannak kapcsolva. Átállítottad ezeket digitális portra?
(#) djsms válasza sysy hozzászólására (») Dec 7, 2013 /
 
Megtettem, de sajnos így sincs változás
Illetve néha a nokia_init() után az összes pixel "világít", de adatot nem tudok rá varázsolni
(#) djsms válasza djsms hozzászólására (») Dec 7, 2013 /
 
átpakoltam az összes vonalat portc-re, de változás most sincs...
(#) vicsys válasza djsms hozzászólására (») Dec 7, 2013 /
 
Ugye 3V-ról üzemelteted?
(#) sysy hozzászólása Dec 7, 2013 /
 
18F26K22 MCU-ban a TIMER4 nem akar megszakítást okozni. Mit bénázok el?

  1. #int_TIMER4                                  
  2. void Laser_Scanner()
  3. {
  4.         Scan_Indx=0;
  5. }
  6. /*******************************/
  7. void
  8. main()
  9. {
  10.         setup_timer_4(T4_DIV_BY_1,20,1);
  11.         clear_interrupt(INT_TIMER4);
  12.         enable_interrupts(INT_TIMER4);
  13.         enable_interrupts(GLOBAL);
  14. loop:   goto    loop;
  15. }
A hozzászólás módosítva: Dec 7, 2013
(#) djsms válasza vicsys hozzászólására (») Dec 7, 2013 /
 
Az lcd 3.3V, a pic 5V tápfeszt kap. Az lcd leírásában amúgy az van, hogy 5V-ot is kaphat, csak a háttérvilágításnak sok, annak 3.3V legyen.
A hozzászólás módosítva: Dec 7, 2013
(#) vicsys válasza djsms hozzászólására (») Dec 7, 2013 /
 
Akkor viszont jel-illesztési gondod van. Próba -képpen, tedd át a PIC-et is 3V-ra.
(#) djsms válasza vicsys hozzászólására (») Dec 7, 2013 /
 
Sajnos már próbáltam... Azt kellene eldönteni, hogy bénázok (előfordul) vagy hibás az lcd. Nincs kedvetek írni egy hello world programot nekem? 16f676 vagy 16f688-hoz belső osszcillátorra. Csak a hex file kellene.
(#) sysy válasza sysy hozzászólására (») Dec 8, 2013 /
 
Jelentem a Timer4 megszakítása működik, csak az MPLAB nem szimulálja a Timer3-4-5-6-ot (sem). A hardwer tudja a dolgát, de a szimulátor nem.
(#) djsms hozzászólása Dec 9, 2013 /
 
Gondoltam ma megint játszom egy kicsit az lcd-vel. Mielőtt bármit is tettem volna a múltkor összerakott próbapanelt még egyszer bekapcsoltam és bármiféle változtatás nélkül működik!!!
Na erre varrjatok gombot...
(#) vicsys válasza djsms hozzászólására (») Dec 10, 2013 /
 
KH ...
(#) sysy válasza djsms hozzászólására (») Dec 10, 2013 /
 
Néha egy POWER RESET csodákra képes!
(#) djsms hozzászólása Dec 10, 2013 /
 
Ahányszor tegnap szétszedtem és összeraktam...
Viszont azt tapasztaltam, hogy táp bekapcs után 1 init nem elég neki. A második után meg befeketedik a kijelző
De némi kutakodás után kicsit módosítottam az init eljárást, így már jó.
Most jöhet a 18b20 kezelése!
(#) vicsys válasza djsms hozzászólására (») Dec 10, 2013 /
 
Hálás lennék, ha leírnád, hogy konkrétan mit változtattál meg és mire, hogy jó legyen. Köszi!
(#) djsms válasza vicsys hozzászólására (») Dec 10, 2013 /
 
Természetesen. Bár azért nem tettem meg, mert nem vagyok biztos a megoldás helyességében
Alapvetően a reset időt emeltem meg.
  1. void nokia_init(void)
  2. {
  3.   output_high(nok_dc);            // bytes are stored in the display data ram, address counter, incremented automatically
  4.   output_high(nok_cs);            // chip disabled
  5.  
  6.   output_low(nok_res);            // reset chip during 250ms
  7.   delay_ms(300);         // <---10ms volt! works with less.....
  8.   output_high(nok_res);
  9.   nokia_write_command(0x21);  
  10.   nokia_write_command(0xC2);   //2v6-5v
  11.   nokia_write_command(0x06);  
  12.   nokia_write_command(0x13);  
  13.   nokia_write_command(0x20);  
  14.   nokia_write_command(0x0C);  
  15.  
  16.   nokia_clean_ddram();      // reset DDRAM, otherwise the lcd is blurred with random pixels
  17.  
  18. }
(#) ernosz hozzászólása Dec 11, 2013 /
 
Sziasztok !
Szeretném a segítségeteket kérni egy PIC24-es, rs232 INT_RDA megszakításával kapcsolatban. Nem tudom ezt a megszakítást elérni, létrehozni, és mostanra már ötletem sincs merre kellene a megoldást keresni. A getc(), putc() függvények maradéktalanul működnek, de a szokásos beállítások ellenére a megszakítás rutinba nem lép be a program. Egy hete mindent feltúrtam a neten ezzel kapcsolatban, de a standard beállításokon kívül nem találtam semmit. Tesztként csináltam egy TMR2 megszakítást, az is tökéletesen működik. Volt már valakinek hasonló tapasztalata?
(#) ernosz válasza ernosz hozzászólására (») Dec 11, 2013 /
 
Az előző beírásomra tényleg nem lehet érdemben válaszolni...
Ami korábban működött a 16F, 18F sorozatnál az most nem működik, és tudom, hogy a PIC24-nek megváltozott a megszakítás kezelése, amit lehetett elolvastam, és kipróbáltam ezzel kapcsolatban. Próbálkoztam beágyazott "asm"-el is, de az sem működött. A forrás file-ban már szinte csak a megszakításhoz tartozó utasítások maradtak. Amit biztosan nem tudok, hogy az egyes CCS utasítások konkrétan mit állítanak a regiszterekben. Próbáltam ezeket is visszafejteni, nem sok sikerrel. Megpróbálom a forrás file-t bemásolni, remélem sikerül! ...és előre is köszönöm a segítséget!
  1. #include <24HJ128GP502.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #fuses XT, nowdt, noprotect
  6.  
  7. setup_oscillator (OSC_20000000);
  8. #use delay(crystal=20mhz)
  9. #use rs232(baud=9600, parity=N, xmit=PIN_a4, rcv=PIN_b4, bits=8 )
  10.  
  11. //==========
  12.  
  13. #int_RDA  
  14. void RDA_isr(void)
  15. {
  16. char c;
  17. c = getc();  
  18. output_high(pin_b15);
  19. }
  20. //==========
  21. void main(void)
  22. {       enable_interrupts(INT_RDA);
  23.         enable_interrupts(global);
  24.         printf ("START ! ");  
  25.  
  26.       for(;;) {
  27.         putc(c);  
  28.         delay_ms(100);
  29.         }
  30. }
(#) levi18 válasza ernosz hozzászólására (») Dec 11, 2013 / 1
 
Szia!
Szerintem az alábbi sor
  1. enable_interrupts(global);
elhagyható, nem szükséges, mert a 24-es PIC-eknél kicsit más a megszakításrendszer. Ami azonban fontos, hogy a fordító nem szelektálta ki az "RP" lábra az UART perifériát. Ezt a "#pin_select" utasítással teheted meg.
Pl:
  1. #pin_select U1TX=PIN_B3
Tehát a kódodnak valahogy így kell majd kinéznie:
  1. #use rs232(STREAM=UART1,  baud=9600, UART1)
  2. #pin_select U1TX=PIN_B5
  3. #pin_select U1TX=PIN_B6
  4.  
  5. void putc_uart1(char c)
  6.  {
  7.   putc( c, UART1 );
  8.  }

Ezután a printf-et így tudod majd használni:
  1. printf(putc_uart1,"START ! ");

A fogadási rutinodnak pedig így kell majd kinézni:
  1. #int_RDA
  2. void RDA_isr(void)
  3. {
  4. char c;
  5. c = fgetc(UART1);  
  6. output_high(pin_b15);
  7. }


Remélem tudtam segíteni.
Üdv!
(#) levi18 válasza levi18 hozzászólására (») Dec 11, 2013 /
 
Elnézést, a
  1. #pin_select U1TX=PIN_B6
helyett a
  1. #pin_select U1RX=PIN_B6
sort akartam írni.
(#) djsms hozzászólása Dec 11, 2013 /
 
Hosszas játék után rájöttem a nokia lcd hibára! Az átvezető guminál volt valami gubanc, tisztítás után hibátlanul üzemel végre! Elég 1 init, jól pozicionál, 10-ből 10x azonnal elindul, nem kell váratni power reset után...
Hiába na, az alattomos hiba a legrosszabb, mert sose lehet tudni éppen mit okoz...
Még jó, hogy kitartó vagyok és nem csapkodós
Amúgy az lcd 5V-ról is megy már egy ideje, csak a ledekhez kellett áramkorlát. Ds18b20 és rtc is működik ahogy kell.
Dátumnál viszont nem jóttem rá mi a 4. adat. Nap, hónap, év, x?
(#) potyo válasza djsms hozzászólására (») Dec 11, 2013 /
 
Milyen RTC is ez?
(#) djsms válasza potyo hozzászólására (») Dec 11, 2013 /
 
(#) ernosz válasza levi18 hozzászólására (») Dec 11, 2013 /
 
Kedves Levi18!
Köszönöm a gyors és alapos választ. Viszonylag gyorsan sikerült elindítani az int_rda-t, viszont azt nem is sejtem, hol vannak elrejtve ezek a speciális PIC24-es CCS információk. Még egyszer köszi!
(#) kistee válasza djsms hozzászólására (») Dec 12, 2013 /
 
Idézet:
„Dátumnál viszont nem jóttem rá mi a 4. adat. Nap, hónap, év, x?”


Nem lehet, hogy a hét napja (hétfő, kedd, stb..)?
(#) vicsys válasza kistee hozzászólására (») Dec 12, 2013 /
 
Az a DOW (Day Of Week), azaz a hét napja, ahogy írtad is.
(#) djsms válasza vicsys hozzászólására (») Dec 12, 2013 /
 
Erre gondoltam én is, de nem azt adja vissza, amit várnék... Még akkor sem, ha vasárnapot veszem első napnak.
Mindegy, nem okoz nagy problémát
Következő: »»   94 / 118
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem