Fórum témák
Fertőtlenítő izzó- • Oszcilloszkóp, avagy hogyan kell használni?
- • VF2 végerősítő
- • Erősítő mindig és mindig
- • Elfogadnám, ha ingyen elvihető
- • Klíma szervizelés, javítás
- • ESP32 dokumentálatlan utasítások
- • Forrasztópákák - melyik miért jó
- • Felajánlás, azaz ingyen elvihető
- • Kombikazán működési hiba
- • PIC programozás mikroC fejlesztőkörnyezetben
- • UV-s NYÁK levilágító készítése
- • Hörmann kapuk
- • STK erősítők javítások
- • Érdekességek
- • Kukorékolás ellen
- • Arduino
- • Riasztószerelés tapasztalatok, ötletek (kizárólag haladóknak)
- • Autóriasztó és központi zár
- • LG okos tv
- • Rendelés külföldről (eBay - Paypal)
- • Logikai analizátor
- • Villanyszerelés
- • Tápegységgel kapcsolatos kérdések
- • PIC program
- • Transzformátor készítés, méretezés
- • Kapcsolási rajzot keresek
- • V-FET és SIT erősítő kapcsolások
- • Alternativ HE találkozó(k)
- • Magyarokamarson
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Labortáp javítás
- • Jókívánság
- • DCF77 vevő
- • Rádióamatőrök topikja
- • LCD monitor probléma
- • Opel Astra elektromos hibák
- • sPlan áramkörtervező program
- • Műhelyünk felszerelése, szerszámai
- • Autóelektronika
- • Számítógép hiba, de mi a probléma?
- • Vásárlás, hol kapható?
- • NYÁK furatgalvanizálás házilag
- • Lemezjátszó beállítása, javítása
- • Vicces - mókás történetek
- • Elektroncső foglalat házilag
- • Sütő javítás
- • DSC riasztó
- • CD lejátszó javítás
- • Digitális óra
- • Mosógép vezérlők és általános problémáik
- • TDA7294 végerősítő
- • Aggregátorról táplált klímaberendezés lágyindítása
- • Hibrid erősítő
- • Dobozolási technikák, műszerdobozok
» Több friss téma
|
Nem tudom, de nálam a
sleep();
#asm
NOP
#endasm
jól működik.
Én is ezt vártam volna tőle, de nem....
#define Nop() #asm nop #endasm
Ez így ránézésre ugyan az.....
A dolog "megoldódni" látszik, bár érteni nem értem.
Ha az RB_isr() függvény - ez ébreszti a pic-et - nem tartalmaz semmi értelmes utasítást, egyszerűen a sleep() sem hajtódik végre. Ha csak egy x = input_b() van benne már megy, ha csak egy sima nop vagy az input_b() van értékadás nélkül, már nem megy. Ez valami CCS feature?
Én arra tippelek,hogy a sleep előtt bejön egy RB megszakítás,és a lekezelés hiánya miatt filyamatosan felébreszti a picet (a megszakításjelzö logika folyamatosan dolgozik,tehát a dolog még az elött megtörténhet,hogy engedélyezed a megszakítást,csak lekezelés hiányában ott marad). Az RB megszakításnál ki kell olvasnod a portot,nem elég csak az rbif bitet törölni. Adatlapot nézd meg. Az értékadás nélküli pedig vélhetöen azért nem müködik,mert a fordító kioptimalizálja azt a sort.
Így igaz! Működik! Köszi!
Sziasztok. SPI-vel "szenvedek"
valahol hibázok de nem rom hol
Az sck kimeneten nem jön meg az órajel, és az sdo-n az adatot sem látom.
íme a kód
#include <12F1822.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //No EE protection
#FUSES PROTECT //Code protected from reads
#FUSES MCLR //Master Clear pin enabled
#FUSES PUT //Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#use delay(clock=8000000)
#define LED PIN_A5 //CHANGE PIN_XX TO YOUR LED PIN NUMBER, EX: PIN_A5
void main()
{
setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
//Example blinking LED program
while(true){
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);
spi_write(0x80);
output_low(LED);
delay_ms(1000);
output_high(LED);
delay_ms(1000);
}
}
Láttok benne valamit amit nem jól csinálok?
Segítségeteket köszönöm
Béééééééna vagyok nagy volt az idő az adatok közt még jó hogy nem láttam......
így már látom a mozgást
void main()
{
setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
while(true){
spi_write(200);
delay_us(100);
}
}
Amit viszont el kellene magyaráznotok mert adatlapból, manualbol nem jövök rá, hogy mi a különbség az SPI_setupra vonatkozóan az Idézet: „SPI_L_TO_H” és SPI_XMIT_L_TO_H[/quote] között.
Pedig az adatlapbol derul ki. Azt jelenti, hogy a bemenetbol melyik elnel veszi a mintat, es hogy az adasnal melyik eńnel ervenyes a kimeno adat.
Igen értem ott rontottam, hogy az elején csak "SPI_L_TO_H" definiáltam és ez a vételre vonatkozik mivel adni akartam "SPI_XMIT_L_TO_H? " is kell........
Még lenne kérdésem, hogyan csinálnátok meg a következőt ccsc-vel:
mcp4802-vel akarok feszültségeket létrehozni.
16biten kell címezni az eszközt. A feszültséget amit kiad azt a középső 8bit határozza meg (pontosabban még bele szól egy bit a 13. ez lényegtelen) tehát szeretném az eszközt címezni 2x8 bittel. valahogyan maszkolnom kellene de ötletem sincs... azt kellene elérnem hogy van egy 8bites értékem és ezt 2 nyolc bites értékkel akarom elküldeni mégpedig úgy hogy az első elküldött érték alsó 4bitje és a második elküldött érték felső 8bitje hordozza a 8bites adatot. Na ezt jól megbonyolítottam
Ezt sikerült összehoznom működik:
while(true){
value=93;
msb=value&0b00001111;
bit_set(msb,4); //Output Shutdown Control bit
lsb=value&0b11110000;
output_low(cs);
spi_write(msb);
spi_write(lsb);
output_high(cs);
delay_us(100);
}
A maszkolásra nem tudom van-e egyszerűbb megoldás?
Struct es union tipusu valtozokkal lehet ilyen varazslasokat csinalni.
Amit írtam nem is jó mert az lsb-t 4bittel tolni kell balra ajjaj asm-ben egyszerűbb lenne.....
Tudnál erre valami kis példát írni?
Probald meg az union es a struct hasznalatat. Egy pelda (nem a Te eseted) union
{
int16 prog;
struct
{
int porc : 8; //unit porcent
int time_p : 7; //unit time
int on_s : 1; //unit on/off
};
}progm;
Ebben az esetben egy unsigned int16 tipusu valtozot hoztunk letre, amiben van 3 kulonbozo hosszusagu valtozo, ugymint 1 8 bites, 1 7 bites, es 1 1 bites valtozo (16 bit osszesen). A belso valtozok kulon irhatok olvashatok, mig az egesz union hasznalhato ( EEPROMba iras SPI-n kuldes etc..) mint egy int 16. Valami ilyesmit kellene csinalnod, es nem kell akkor shiftelni, maszkolni es egyeb varazslasokat csinalni a programban, hanem sima ertekadassal megoldhato a dolog. Tisztabb, szarazabb erzes.
Jól hangzik de nem nagyon tudom átültetni az én esetemre még csak megérteni sem.....
Shift operátor C-ben is van << balra; >> jobbra.
Pl.:
var = var << 4; //Négy bittel balra léptet
Akkor marad ez a megoldás, aztán majd áttérek az elegánsabbra ha fel bírom fogni
pedig nem igen nehez, csak a valtozok neveit es a hosszusagot kell atirni. union
{
int16 Da_cntr;
struct
{
int a_b : 1; //bit a/b
int na1 : 1; //bit void
int ga : 1; //bit gain
int shdn : 1; //bit shdown
int data_da : 8; //int DA Data
int na4 :4; //4 bit void
};
}da_cntrw;
da_cntrw.data_da=100;// data to DAC
da_cntrw.a_b=0;// chanel A
da_cntrw.ga=1;//gain 1x
da_cntrw.shdn=1;// chanel a active
spi_wr (da_cntrw.Da_cntr);write to MCP4802
Ugy kepzeld el, hogy a struktura megegyezik bitrol bitre a regiszter felepitesevel. Viszont resze az unionnak. Amikor valtoztatsz valamit az union int16 ertekenek a bitjeit valtoztatod.
Biztos, hogy jó így a szintaktika ahogy leírtad nekem? Mert sehogy sem bírom megetetni a fordítóval.
Arra gondolok, hogy a CCS esetleg nem szereti az anonim struktúrákat az unionban. Próbáld meg így
union
{
int16 Da_cntr;
struct
{
int a_b : 1; //bit a/b
int na1 : 1; //bit void
int ga : 1; //bit gain
int shdn : 1; //bit shdown
int data_da : 8; //int DA Data
int na4 :4; //4 bit void
} str ;
} da_cntrw;
da_cntrw.str.data_da=100;// data to DAC
da_cntrw.str.a_b=0;// chanel A
da_cntrw.str.ga=1;//gain 1x
da_cntrw.str.shdn=1;// chanel a active
spi_wr (da_cntrw.Da_cntr);write to MCP4802
Vagy ha nem jó, akkor másold ide a hibaüzenetet.
Nem tudom mi a hibauzenet, de nalam eleg sok ilyen tipusu union szokott elofordulni, es a fordito meg nem vinnyogott sohasem.
Hmm nem akar össze jönni inkább mindent mutatok.
#include <12F1822.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //No EE protection
#FUSES PROTECT //Code protected from reads
#FUSES MCLR //Master Clear pin enabled
#FUSES PUT //Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#use delay(clock=8000000)
#define cs PIN_A5 //define cs
unsigned int8 msb,lsb,value;
void main()
{
setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
union
{
int16 Da_cntr;
struct
{
int a_b : 1; //bit a/b
int na1 : 1; //bit void
int ga : 1; //bit gain
int shdn : 1; //bit shdown
int data_da : 8; //int DA Data
int na4 :4; //4 bit void
} str ;
} da_cntrw;
da_cntrw.str.data_da=100;// data to DAC
da_cntrw.str.a_b=0;// chanel A
da_cntrw.str.ga=1;//gain 1x
da_cntrw.str.shdn=1;// chanel a active
spi_wr (da_cntrw.Da_cntr);write to MCP4802
while(true){
}
}
Hiba üzenetek:
Executing: "C:\Program files\Picc\CCSC.exe" +FM "learn.c" +DF +LN +T +A +M +Z +Y=9 +EA #__12F1822=TRUE
*** Error 35 "learn.c" Line 48(23,24): Number of bits is out of range
*** Error 36 "learn.c" Line 49(17,20): Expecting a ; or ,
*** Error 48 "learn.c" Line 50(14,17): Expecting a (
*** Error 43 "learn.c" Line 51(5,6): Expecting a declaration
*** Error 48 "learn.c" Line 51(7,15): Expecting a (
*** Error 48 "learn.c" Line 53(5,13): Expecting a (
*** Error 48 "learn.c" Line 53(14,17): Expecting a (
*** Error 48 "learn.c" Line 53(18,25): Expecting a (
*** Error 43 "learn.c" Line 53(26,29): Expecting a declaration
*** Error 43 "learn.c" Line 53(29,30): Expecting a declaration
*** Error 48 "learn.c" Line 54(5,13): Expecting a (
*** Error 48 "learn.c" Line 54(14,17): Expecting a (
*** Error 48 "learn.c" Line 54(18,21): Expecting a (
*** Error 43 "learn.c" Line 54(22,23): Expecting a declaration
*** Error 43 "learn.c" Line 54(23,24): Expecting a declaration
*** Error 48 "learn.c" Line 55(5,13): Expecting a (
*** Error 48 "learn.c" Line 55(14,17): Expecting a (
*** Error 48 "learn.c" Line 55(18,20): Expecting a (
*** Error 43 "learn.c" Line 55(21,22): Expecting a declaration
*** Error 43 "learn.c" Line 55(22,23): Expecting a declaration
*** Error 48 "learn.c" Line 56(5,13): Expecting a (
*** Error 48 "learn.c" Line 56(14,17): Expecting a (
*** Error 48 "learn.c" Line 56(18,22): Expecting a (
*** Error 43 "learn.c" Line 56(23,24): Expecting a declaration
*** Error 43 "learn.c" Line 56(24,25): Expecting a declaration
*** Error 32 "learn.c" Line 57(13,21): Expecting a , or )
*** Error 48 "learn.c" Line 57(22,29): Expecting a (
*** Error 43 "learn.c" Line 57(30,31): Expecting a declaration
*** Error 48 "learn.c" Line 57(37,42): Expecting a (
*** Error 48 "learn.c" Line 60(4,11): Expecting a (
*** Error 43 "learn.c" Line 60(9,10): Expecting a declaration
*** Error 43 "learn.c" Line 60(14,15): Expecting a declaration
*** Error 43 "learn.c" Line 60(14,15): Expecting a declaration
*** Error 43 "learn.c" Line 60(15,16): Expecting a declaration
*** Error 43 "learn.c" Line 62(1,2): Expecting a declaration
*** Error 43 "learn.c" Line 63(1,2): Expecting a declaration
36 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Tue Apr 03 21:18:39 2012
Mondjuk a write to MCP4802 elé nem ártana //-t tenni, hogy azt kommentnek vegye a fordító.
Igen,de sajnos utána is marad a hiba rengetegem...
Na megvan. Nem akarja a Byte valtozot kettevagni. Tehat byte hatarra kell esnie a 8 bites valtozonak. Kulonben ejnye-bejnye. Itt a megoldas: union
{
int16 Da_cntr;
struct
{
int data_da : 8; //int DA Data
int shdn : 1; //bit shdown
int ga : 1; //bit gain
int na1 : 1; //bit void
int a_b : 1; //bit a/b
int na4 :4; //4 bit void
};
}da_cntrw;
da_cntrw.data_da=0x96;// data to DAC
da_cntrw.a_b=1;// chanel A
da_cntrw.ga=1;//gain 1x
da_cntrw.shdn=1;// chanel a active
n_set= (da_cntrw.Da_cntr)<<4;
Fordul, mukodik. Ja es a helyen van minden bit. (elvileg)
Ezen már tudok csmegézni nagyon köszönöm
A "da_cntrw" az milyen típusú változó hogyan jön a képbe?
Union. Elotte deklaraltad. Ja termeszetesen int16. Mert az union torzs valtozoja int16. De tedd be a Watch ablakba, es mindjart latszik.
Megzavart a dolog mert csak ezt látom "int16 Da_cntr;"
|
|