|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vitez93 Član
Pridružen-a: Pet 19 Sep 2008 20:00 Prispevkov: 1018 Aktiv.: 5.19 Kraj: Celje- Dobrna
|
Objavljeno: Sob Feb 26, 2011 9:09 pm Naslov sporočila: |
|
|
Potrebujem i2c komunikacijo pa mi ne uspe. Imam Silvovo veliko uro in krmilil bi jo z zaenkrat 16f690, potem pa 16f628a. Zaenkrat poizkušam pač nekaj poslati na vodilo in opazovati z osciloskopom. Pa mi ne uspe. Imam pa CCS prevajalnik. Kje bi lahko videl preveden program v ASM?
Če simuliram program pri i2c_write(); skoči na #use i2c in se tam zacikla. Sploh se nič ne piše na vodilo.
Koda: |
#include <16F690.h>
#FUSES XT, NOWDT, NOPUT, MCLR, NOPROTECT, NOBROWNOUT, INTRC_IO, NOIESO, NOFCMEN,
#use delay(clock=4M)
#use i2c(master, sda=PIN_B6, scl=PIN_B5, FORCE_SW) // Configure Device as Master
void main()
{
i2c_start();
i2c_write(200);
while(1);
{
}
} |
|
|
Nazaj na vrh |
|
|
ljudsko Član
Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.86 Kraj: Koroška-Mežica
|
Objavljeno: Ned Feb 27, 2011 12:52 am Naslov sporočila: |
|
|
Tukaj ni podpičja.. samo "while(1){}" _________________ return;
brake; |
|
Nazaj na vrh |
|
|
vitez93 Član
Pridružen-a: Pet 19 Sep 2008 20:00 Prispevkov: 1018 Aktiv.: 5.19 Kraj: Celje- Dobrna
|
Objavljeno: Pon Feb 28, 2011 5:52 pm Naslov sporočila: |
|
|
Ja hvala sem popravil. MPLAB mi javi, da se program zacikla in da naj preverim, če imam izklopljen WDT. Imam. Nevem, zakaj se program tam zacikla. Kje bi pa lahko videl prevedeno kodo v zbirniku? |
|
Nazaj na vrh |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.07
|
Objavljeno: Pon Feb 28, 2011 7:01 pm Naslov sporočila: |
|
|
Preveden program lahko vidiš z "view->disassembly listing". Sicer se pa program "obesi", ker na naslovu 0x1b-0x1c čaka, da se SCL vrne nazaj na "1". Če to simuliraš, potem gre program naprej in se zacikla pri while(1).
btw nimaš pravih pinov nastavljenih za I2C, prav tako imaš hkrati XT in INTRC_IO... odloči se, kaj bi rad _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
|
vitez93 Član
Pridružen-a: Pet 19 Sep 2008 20:00 Prispevkov: 1018 Aktiv.: 5.19 Kraj: Celje- Dobrna
|
Objavljeno: Pon Feb 28, 2011 9:15 pm Naslov sporočila: |
|
|
Hvala za odgovor.
Ko sem našel ASM kodo sem takoj videl za kaj se gre. Najbolj zanimivo je bilo pa to, ko sem rešil program in priklopil je delalo iz prve. Edino en segment ne dela.
Glede tiste nastavitve oscilatorja pa sploh nisem videl in je vseeno delalo.
Še koda v C če kdo rabi:
Koda: |
#include <16F690.h>
#FUSES , NOWDT, NOPUT, MCLR, NOPROTECT, NOBROWNOUT, INTRC_IO, NOIESO, NOFCMEN, NOWDT,
#use delay(clock=4M)
#use i2c(master, sda=PIN_B6, scl=PIN_B5, FAST=1000) // Configure Device as Master
int naslov = 0x70;
int desetice = 8;
int enice = 6;
int desetinke = 4;
int stotinke = 7;
int izpis_1;
int izpis_2;
int izpis_3;
int izpis_4;
int control = 0b00010111;
int x;
int pretvori(int x);
void poslji(data);
void main()
{
izpis_1 = pretvori(desetice);
izpis_2 = pretvori(enice);
izpis_3 = pretvori(desetinke);
izpis_4 = pretvori(stotinke);
bit_set(izpis_4, 0);
i2c_start(); // Start condition
i2c_write(naslov);
i2c_write(0x00);
i2c_write(control);
i2c_write(izpis_2);
i2c_write(izpis_3);
i2c_write(izpis_4);
i2c_write(izpis_1);
i2c_stop();
while(1) // Neskonča zanka
{}
}
int pretvori(int x)
{
switch (x) {
case 0: return(0b11101110);
break;
case 1: return(0b01001000);
break;
case 2: return(0b11010110);
break;
case 3: return(0b11011010);
break;
case 4: return(0b01111000);
break;
case 5: return(0b10111010);
break;
case 6: return(0b10111110);
break;
case 7: return(0b11001000);
break;
case 8: return(0b11111110);
break;
case 9: return(0b11111010);
break;
}
} |
|
|
Nazaj na vrh |
|
|
jajo Član
Pridružen-a: Tor 01 Dec 2009 21:45 Prispevkov: 103 Aktiv.: 0.57 Kraj: Maribor
|
Objavljeno: Pon Apr 11, 2011 6:23 pm Naslov sporočila: |
|
|
Zdravo
Tukaj sem videl ogromno povezav za knjige iz katerih se lahko učiš c jezik pa me zanima katera bi bila najprimernejša za učenje od začetka. Pravzaprav, da bi bila takšna da bi skozi programiranje pica spoznaval c od začetka?
Lp |
|
Nazaj na vrh |
|
|
mkezmah Član
Pridružen-a: Sre 21 Jan 2009 16:30 Prispevkov: 220 Aktiv.: 1.15 Kraj: Maribor
|
|
Nazaj na vrh |
|
|
matjazkariz Član
Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.47
|
Objavljeno: Tor Apr 12, 2011 3:21 pm Naslov sporočila: |
|
|
Mogoče se je najlažje naučiti ob preučevanju primerov. Knjige so mnogokrat preobsežne in ti vzamejo precej časa, volje in energije.
Začneš z lažjimi primeri (Blink LED) in nadaljuješ z težjimi... Mnogo primerov boš našel v gradivu raznih demo plošč.
Moraš vedeti, da znanje programiranja v C-ju ni znaje programiranja mikrokontrolerjev. Vsekakor pomaga poznati osnovne funkcije C knjižnic, se pa da mnogo narediti tudi brez tega, sploh na začetku. Funkcije iz stdio.h in podobno lahko sproti spoznavaš kasneje.
Bolj težavno bo mogoče zbrati na kup vse rutine za razno periferijo - standardne gradnike programa. Ko imaš to enkrat v lasti in jih znaš uporabljati, je programiranje samo še copy-paste iz raznih že obstoječih projektov in vezanje vsega skopiranega v novo smiselno celoto.
No ja, mogoče preveč daleč razlagam. Za enkrat si poišči primere in ne se bat eksperimentirat. S poskusi se boš največ naučil. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
|
jajo Član
Pridružen-a: Tor 01 Dec 2009 21:45 Prispevkov: 103 Aktiv.: 0.57 Kraj: Maribor
|
Objavljeno: Sre Apr 13, 2011 1:13 pm Naslov sporočila: |
|
|
Pozna mogoče kdo kakšno internetno stran na keteri bi bili kakšni preprosti primeri od utripanja ledic pa do...
Lp |
|
Nazaj na vrh |
|
|
ljudsko Član
Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.86 Kraj: Koroška-Mežica
|
Objavljeno: Sre Apr 13, 2011 2:56 pm Naslov sporočila: |
|
|
Pa dobro a si delaš norca, ali še res nisi kdaj brskal po internetu? _________________ return;
brake; |
|
Nazaj na vrh |
|
|
xsyt Član
Pridružen-a: Sre 28 Maj 2008 22:19 Prispevkov: 1346 Aktiv.: 6.73 Kraj: Slov.Bistrica
|
Objavljeno: Sre Apr 13, 2011 3:14 pm Naslov sporočila: |
|
|
Klik! |
|
Nazaj na vrh |
|
|
drVrh Član
Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.52 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Sob Apr 16, 2011 1:18 pm Naslov sporočila: |
|
|
Lep pozdrav,
malo sem zgubljen okrog teh konfiguracijskih bitov za 16F628 PIC v mikroC, nisem našel kar bi mi povedalo kaj naj bi pomenilo HS, XT pri oscilatorju, kako nastaviti te bite za osnoven zagon, tipka, LCD.
Prosil bi za kakšen vaš primer nastavitev. _________________ Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega |
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.48 Kraj: Yogyakarta
|
Objavljeno: Sob Apr 16, 2011 1:55 pm Naslov sporočila: |
|
|
XT je kristal pod 4Mhz
vse kar je nad tem je HS (high speed)
Imaš pa še HS_PLL način ki ti uro kristala pomnoži s 4 znotraj mikrokontrolerja.
Paziti moraš samo da ne prekoračiš s tem frekvence 40MHz, torej je v tem primeru lahko max kristal 10MHz.
Imaš še opcijo notranjega osilatorja.
Nastavljanje se pa malenkost razlikuje med posameznimi družinami (recimo 16F, 18F, 24H..). Kar je odvisno tudi od prevajalnika, ki ga uporabljaš.
recimo Pic16F1928, HiTec prevajalnik
Koda: |
#if WDTSENSOROFF
__CONFIG(FOSC_INTOSC & WDTE_ON & PWRTE_OFF & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_ON & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF);
#else
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_ON & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF);
#endif
__CONFIG(WRT_OFF & PLLEN_ON & STVREN_OFF & BORV_25 & LVP_OFF);
|
pic18F4550 (z internim 96Mhz oscilatorjem za USB)
Koda: |
/** CONFIGURATION **************************************************/
#pragma config PLLDIV = 2 // (8 MHz crystal)
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config VREGEN = ON //USB Voltage Regulator
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
// #pragma config CCP2MX = ON
#pragma config STVREN = ON
#pragma config LVP = OFF
// #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming
#pragma config XINST = OFF // Extended Instruction Set
#pragma config CP0 = OFF
#pragma config CP1 = OFF
// #pragma config CP2 = OFF
// #pragma config CP3 = OFF
#pragma config CPB = OFF
// #pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
// #pragma config WRT2 = OFF
// #pragma config WRT3 = OFF
#pragma config WRTB = OFF // Boot Block Write Protection
#pragma config WRTC = OFF
// #pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
// #pragma config EBTR2 = OFF
// #pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
|
Pic18F8722
Koda: |
#pragma config OSC = HSPLL //HSPLL // Clock > 1MHz
#pragma config FCMEN = OFF // Fail safe clock monitor
#pragma config IESO = OFF // Internal - External Oscilator Switch over
#pragma config PWRT = ON //ON // Power up Timer
#pragma config BOREN = OFF // Brown out reset
#pragma config WDT = ON //ON // Watchdog timer
#pragma config WDTPS = 4096 //2048
#pragma config MODE = MC //EM // Processor mode selection - Extended Microcontroller mode
#pragma config ADDRBW = ADDR16BIT // External bus address with - 16 bit
#pragma config DATABW = DATA8BIT // External bus data with - 8 bit
#pragma config WAIT = OFF // External bus data wait (ON / OFF)
//#pragma config MCLR = OFF // MCLR Enable / Disable
#pragma config LPT1OSC = OFF // T1 oscillator enable
#pragma config STVREN = OFF // Stack Overflow reset
#pragma config LVP = OFF // Low voltage programming
#pragma config XINST = OFF // XINST enable
#pragma config DEBUG = OFF // Background Debugger enable
//#pragma config STVR = OFF
|
Pic24HJ64gp204
Koda: |
#if defined (__PIC24F__)
_CONFIG2(IESO_OFF & FNOSC_PRIPLL & FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_HS)
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & ICS_PGx1 & FWDTEN_OFF)
#elif defined (__PIC24H__)
|
Aja BTW: v datasheet-ih so tele zadeve z oscilatorji dobro razložene, samo najti je treba potem ukaze od prevajalnika ki jih tudi zimplementira _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.48 Kraj: Yogyakarta
|
Objavljeno: Sob Apr 16, 2011 1:59 pm Naslov sporočila: |
|
|
pozabil dopisati opombo pri 24H družini kjer lahko določaš izhode perifernim enotam.
omenjeni uC ima namreš možnosti ISP programirnja na 3 različnih parih ISP pinov.
in s "ICS_PGx1" določimo da so to PGM1, PGC1 in PGD1, da ne bo kdo zakaj mu ne zazna mikrokontrollerja _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
MarkoM Član
Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.79 Kraj: Lovrenc na P.
|
Objavljeno: Sob Apr 16, 2011 7:09 pm Naslov sporočila: |
|
|
red_mamba je napisal/a: |
XT je kristal pod 4Mhz
vse kar je nad tem je HS (high speed)
Imaš pa še HS_PLL način ki ti uro kristala pomnoži s 4 znotraj mikrokontrolerja.
Paziti moraš samo da ne prekoračiš s tem frekvence 40MHz, torej je v tem primeru lahko max kristal 10MHz. |
Ravno sedaj delam en "fuš" s pic18f458, ker je pač še stara zaloga (to je moj zadnji fuš s pici, ker imajo IDE v totalnem k...., malo boljši notepad) in sem nastavil pomotoma na 4xfosc z zunanjim 20MHz kristalom. Stvar je delovala normalno, čeprav, naj bi bil ta pic do 40MHz. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 265 dni
Powered by phpBB © 2001, 2005 phpBB Group
|