Fórum témák
- • Audiofil, High End Audio
- • Napelem alkalmazása a lakás energia ellátásában
- • Mosogatógép hiba
- • Biciklilámpa / bringalámpa
- • Tranzisztorok helyettesítése
- • Hibrid erősítő
- • Nagy áramú pwm vezérlő építése
- • Kondenzátor
- • Elektronyika orosz digitális órák
- • Opel Astra elektromos hibák
- • Számítógép hiba, de mi a probléma?
- • Villanyszerelés
- • LCD monitor probléma
- • Transzformátor készítés, méretezés
- • Autórádió (fejegység) problémák, kérdések, válaszok
- • ESR mérő
- • Érdekességek
- • Tápegységgel kapcsolatos kérdések
- • Jókívánság
- • Analóg oszcilloszkóp javítása
- • Vicces - mókás történetek
- • LCD kijelző vezérlése, életre keltése
- • LED-es lámpa, meghajtó áramkör
- • Erősítő mindig és mindig
- • Sárga Kazettás Piaci Nintendo (8bit)
- • Projektor
- • Teljesítmény -LED, powerLED (pl. Cree, Luxeon) vezérlése
- • Aszinkron motorok tekercselése
- • DSP - Miértek, hogyanok
- • TV hiba, mi a megoldás?
- • Kombikazán működési hiba
- • Szilárdtest relé
- • LCD TV probléma
- • 3-fázisú Modbus-os teljesítményszabályzó (SCR power controller)
- • Digitális forrasztóállomás
- • Li-Po - Li-ion akkumulátor és töltője
- • Rendelés külföldről (eBay - Paypal)
- • Rádiós adó-vevő modulok
- • Rádióamatőrök topikja
- • Westen 240 Fi gázkazán hiba
- • Padlófűtés vezérlés
- • Menetszámolós tekercselőgép házilag
- • Autó-generátor nem tölt rendesen
- • Digitális kapcsoló
- • Erősítő probléma
- • Hiszterézis komparátor
- • Dobozolási technikák, műszerdobozok
- • Műhelyünk felszerelése, szerszámai
- • Rossz HDD javítás, mentés
- • Tervezzünk nyákot EasyEDA-val
- • Lézergravírozás
- • GPS GSM modulok programozása
- • HESTORE.hu
- • Hűtőgép probléma
- • Ultrahangos párásító
» Több friss téma
|
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Mi van akkor, ha valami megszakításban olvasol?
Akkor az olvasás addig tart ameddig tart és minden csak ezután jöhet.
Vagy ilyen lehetőség nem játszik?
Bár nem egészen értem a problémád, de hátha valami segít vagy rávezet a megoldásra:
SPI sebességének növelése.
MCU sebességének növelése.
LED driver más egyéb kommunikációs csatorna, ha lehetséges. (írásnál szokott ilyen lenni, olvasásnál kevésbé)
A LED driverben sok regiszter van, ezekből csak vagy 2-3 van ami változhat menet közben, mert azokban állapotjelző flag-ek vannak, így azokon keresztül tud problémákat jelezni a mikrovezérlőnek (persze ha a mikrovezérlő ki is olvassa belőle). Ezért is alkalmaztam jelenleg ezt a módszert, de a legkorrektebb az lenne ha minen módosításnál kiolvasnám, változtatnám az egyes biteket majd visszaírnám.
Ha csak olyan egyszerű lenne a probléma, hogy egy sima megszakításban lekezelném akkor nem tettem volna fel a kérdést...
Az a gond, hogy operációs rendszer fut a mikrovezérlőn, amikben különböző task-ok vannak, amelyeket bizonyos időközönként meghív az op rendszer, egyiket pl 1ms-onként, másikat 10ms harmadikat 25ms. A teljes program rengeteg modulból áll amik flag-eken keresztül kommunikálnak egymással. Az a rész ahol adatokat kellene küldjek és fogadjak (a LED drivernek) a 25ms-os container-ben van és abban tudom meghívni az SPI függvényeket, amik egy másik modulban vannak, nem tudom milyen módon vannak megírva, de azok amúgyse módosíthatóak, annyit tudok, hogy kb 2ms után állít be egy flag-et és azzal jelzi, hogy kiküldte vagy beolvasta az adatot.
Így én ha kiküldök a 25ms-os függvényemből egy bájtot akkor annak a továbbításáról csak 2ms múlva szerzek tudomást, ezért küldésnél csak 25ms-onként tudok küldeni egy-egy adatot. Olvasásnál is ugyanez lenne a helyzet, azaz kiküldeném az olvasni kívánt regiszter címét, majd 25ms múlva meghívhatom az olvasó függvényt, hogy olvassa ki nekem az adatokat, amit megint csak 2ms múlva kapok meg, de addig nem várakozhatok ott annyit, mert a 25ms-os függvényem teljes lefutási ideje le van korlátozva az op rendszer miatt és csak úgy egy while-t nem tehetek be, hogy várja meg a flag-et...
Így ha az olvasást követő parancs az lenne hogy az olvasás eredményét módosítsa és küldje vissza akkor nem tehetek semmit, mert még nincs adat amit módosítani kellene. Emiatt kérdeztem, hogy ha még valakinek volt hasonló problémája akkor mi a teendő, jelenleg csak a küldést használom, egy segédváltozóval (egyfajta Latch-ként használom) és működik is jól, remélem a későbbiekben nem kérik az olvasást is
Amúgy a mikrovezérlő 24MHz-en fut az SPI meg 600kHz-en. A LED driver csak SPI-on tud kommunikálni, de ezen változtatni már nem lehet, mert a hardver már készen le van gyártva, már csak a szoft kell rá.
Sziasztok!
Tudna valaki egy kis segítséget adni MM74C32N bekötéséhez? Konkrétan Ehhez szeretném szintillesztésként használni.
Megnéztem én is , igen , nekem is volt egy gyanúm rá hogy ez nem lesz jó. Köszi.
Én nemrég 74LVC07A -t használtam ilyesmihez.
Köszi. Lenne egy kérdésem. Egy ledet kapcsolok ki - be és szeretném lekérdezni az állapotát , hogy éppen be van e kapcsolva vagy nincs.
Ezt hogy lehet? Mert -el bekapcsolom , de lekérdezni meg így próbáltam :
if(PORTB.F0 == 1) { //led bekapcsolva}
, de nem jó. A hozzászólás módosítva: Márc 28, 2015
Használj egy változót a PORTB árnyékaként. Annak a bitjeit állítsad, majd küldd ki a portra az egész bájtot.
Beolvasáskor a PORTB a PIC lábának állapotát adja vissza. A LED ottléte eltolja a szinteket, ezért nem kapsz jó eredményt.
Milyen PIC-et használsz nem muszáj árnyék változót létrehozni, ha van LAT regiszter is (ha jól tudom az is egy árnyék regiszternek számít) a PIC18-nál(az újabb 16F nél is) a LAT vissza van kötve a kimeneti LATCH-ról és ha azt figyeled és abba írod a kimeneti állapotot akkor működnie kell.
Ennél a PIC-nél nincs LAT marad az árnyék változó vagy esetleg ha analóg port kapcsold ki az analóg bemenetet(ANSEL:ANSELH) és úgy próbáld meg(de ebben nem vagyok biztos én mindig LAT-al figyeltem).
Hogy lehet árnyék változót készíteni ? Az az define lenne ? Nem találok semmit a googleban
Egy változót csak tudsz deklarálni? Az árnyék jelzőt csak a könnyebb érthetőség kedvéért használtuk.
Igen ,pl. unsigned int test = 0 ;
Köszi.
Aha , nem tudok
unsigned char led = PORTB.F0;
Most így elvileg megkapnám a led változóban , nem ?
Vagy így:
unsigned char LATB = 0x01
PORTB = LATB
if((LATB & 0x01) == 1)
{...}
A LATB a LED valtózónak megfelelő. A hozzászólás módosítva: Márc 28, 2015
Erre is hibát dob :
Idézet: „29 401 ; expected, but '=' found example.c”
Idézet: „29 392 'PORTB' Identifier redefined example.c”
MikroC a fordítóm egyébként. A hozzászólás módosítva: Márc 29, 2015
Egy utasítást nem a ';' karakternek kéne lezárni?
De igazad van telefonról írtam és elfelejtettem.
Megis hogyan kepes egy LED eltolni annyira a szintet, hogy nem jo erteket olvas be? Ha nem totem-pole a kimenet (mondjuk nyitott kollektoros), akkor vilagos. Vagy, ha nincs elotet ellenallas a LED-del sorban, de akkor elobb azt a problemat kell megszuntetni.
Igazad van, úgy kellett volna írni, hogy eltolhatja a szinteket. A hozzászólás módosítva: Márc 29, 2015
(#) |
kt hozzászólása |
Márc 29, 2015 |
|
/ |
|
|
Sziasztok.
Szerintetek ezt a pickit2 clont érdemes megvenni?
Bővebben: Link A hozzászólás módosítva: Márc 29, 2015
(#) |
kt válasza kt hozzászólására (») |
Márc 29, 2015 |
|
/ |
|
|
Ennyiért otthon is kapsz talán még eredetit is.
Szia!
2K előtét ellenállás van a leden és így sem mutatja azt , hogy bekapcsolva lenne ( Mindig az else ág teljesül tehát Kikapcsolva).
Bemásolom a teljes forrást (59. sorban van az első vizsgálat, 143.ban pedig a második) // duplex config flags
#define Spi_Ethernet_HALFDUPLEX 0x00 // half duplex
#define Spi_Ethernet_FULLDUPLEX 0x01 // full duplex
// mE ehternet NIC pinout
sfr sbit SPI_Ethernet_Rst at RC0_bit;
sfr sbit SPI_Ethernet_CS at RC1_bit;
sfr sbit SPI_Ethernet_Rst_Direction at TRISC0_bit;
sfr sbit SPI_Ethernet_CS_Direction at TRISC1_bit;
// end ethernet NIC definitions
typedef struct
{
unsigned canCloseTCP: 1; // flag which closes TCP socket (not relevant to UDP)
unsigned isBroadcast: 1; // flag which denotes that the IP package has been received via subnet broadcast address (not used for PIC16 family)
} TEthPktFlags;
/************************************************************
* ROM constant strings
*/
const unsigned char httpHeader[] = "HTTP/1.1 200 OK\nContent-type: " ; // HTTP header
const unsigned char httpMimeTypeHTML[] = "text/html\n\n" ; // HTML MIME type
const unsigned char httpMimeTypeScript[] = "text/plain\n\n" ; // TEXT MIME type
unsigned char httpMethod[] = "GET /";
/*
* web page, splited into 2 parts :
* when coming short of ROM, fragmented data is handled more efficiently by linker
*
* this HTML page calls the boards to get its status, and builds itself with javascript
*/
//*************************************************************************
// Change the IP address of the page to be refreshed
const char *indexPageHEAD = "<meta http-equiv='refresh' content='10;url=http://192.168.0.170/'>\
<HTML><HEAD></HEAD><BODY>\
<h1>Teszt mikrovezérlo<p>avec MikroC PRO v5.6.1</h1>\
<p><a href=\"http://192.168.0.170/b\">Led be</a> - <a href=\"http://192.168.0.170/k\">Led ki</a><p>\
<p><a href=/>Frissít</a><p>\
<script src=/s></script>";
const char *indexPageBODY = "<form name='input' method='get'><input type='text' name='parancs' /> <br/><input type='submit' name='be' value='Mehet'/></form>";
const char *indexPageBODY2 = "</table></td><td>\
<table border=1 style='font-size:20px; font-family: terminal;'>\
<tr><th colspan=3>PORTD (OUT) : <script>document.write(ss);</script></th></tr>\
<script>\
var str,i;\
str='';\
for(i=0;i<8;i++)\
{\
str+='<tr><td bgcolor=#cccccc>LED #'+i+'</td>';\
if(PORTB.F0 == 0)\
{\
str+='<td bgcolor=green>Bekapcsolva';\
}\
else\
{\
str+='<td bgcolor=#999999>Kikapcsolva';\
}\
str+='</td></tr>';}\
document.write(str);\
</script>\
</table></td></tr></table>\
<p>This is HTTP request #<script>document.write(REQ)</script><p>\
</BODY></HTML>";
//*************************************************************************
/***********************************
* RAM variables
*/
unsigned char myMacAddr[6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f}; // my MAC address
unsigned char myIpAddr[4] = {192, 168, 0, 170}; // my IP address
unsigned char getRequest[15]; // HTTP request buffer
unsigned char get_Request, digit_getRequest, etat_interrupteur;
unsigned char dyna[30]; // buffer for dynamic response
unsigned long httpCounter = 0; // counter of HTTP requests
#define putConstString SPI_Ethernet_putConstString
#define putString SPI_Ethernet_putString
unsigned int SPI_Ethernet_UserTCP(unsigned char *remoteHost, unsigned int remotePort,
unsigned int localPort, unsigned int reqLength, TEthPktFlags *flags)
{
unsigned int len = 0 ; // my reply length
unsigned int i ; // general purpose integer
// should we close tcp socket after response is sent?
// library closes tcp socket by default if canClose flag is not reset here
// flags->canClose = 0; // 0 - do not close socket
// otherwise - close socket
if(localPort != 80)
{ // I listen only to web request on port 80
return(0) ;
}
// get 10 first bytes only of the request, the rest does not matter here
for(i = 0 ; i < 10 ; i++)
{
getRequest[i] = SPI_Ethernet_getByte() ;
}
getRequest[i] = 0 ;
if(memcmp(getRequest, httpMethod, 5))
{ // only GET method is supported here
return(0) ;
}
httpCounter++ ; // one more request done
get_Request = getRequest[5]; // s , d
if(get_Request == 'b')
{
len = putConstString(httpHeader); // HTTP header
len += putConstString(httpMimeTypeHTML); // with text MIME type
PORTB.F0 = 1;
len += putConstString(indexPageHEAD); // HTML page first part
len += putConstString(indexPageBODY); // HTML page second part
len += putConstString(indexPageBODY2); // HTML page second part
}
if(get_Request == 'k')
{
len = putConstString(httpHeader); // HTTP header
len += putConstString(httpMimeTypeHTML); // with text MIME type
PORTB.F0 = 0;
len += putConstString(indexPageHEAD); // HTML page first part
len += putConstString(indexPageBODY); // HTML page second part
len += putConstString(indexPageBODY2); // HTML page second part
if(PORTB.F0 == '0') { PORTB.F7 = 1; }
}
if(get_Request == 's') // utiliser pour <script src=/s></script>
{
// if request path name starts with s, store dynamic data in transmit buffer
// the text string replied by this request can be interpreted as javascript statements
// by browsers
len = putConstString(httpHeader); // HTTP header
len += putConstString(httpMimeTypeScript); // with text MIME type
// add AN2 value to reply
IntToStr(ADC_Read(2), dyna);
len += putConstString("var AN2=");
len += putString(dyna);
len += putConstString(";");
// add AN3 value to reply
IntToStr(ADC_Read(3), dyna);
len += putConstString("var AN3=");
len += putString(dyna);
len += putConstString(";");
// add PORTB value (buttons) to reply
len += putConstString("var PORTB=");
IntToStr(PORTB, dyna);
len += putString(dyna);
len += putConstString(";");
// add PORTD value (LEDs) to reply
len += putConstString("var PORTD=");
IntToStr(PORTD, dyna);
len += putString(dyna);
len += putConstString(";");
// add HTTP requests counter to reply
IntToStr(httpCounter, dyna);
len += putConstString("var REQ=");
len += putString(dyna);
len += putConstString(";");
}
if(len == 0)
{
// what do to by default
len = putConstString(httpHeader); // HTTP header
len += putConstString(httpMimeTypeHTML); // with HTML MIME type
len += putConstString(indexPageHEAD); // HTML page first part
len += putConstString(indexPageBODY); // HTML page second part
len += putConstString(indexPageBODY2); // HTML page second part
}
return(len) ; // return to the library with the number of bytes to transmit
}
unsigned int SPI_Ethernet_UserUDP(unsigned char *remoteHost, unsigned int remotePort,
unsigned int destPort, unsigned int reqLength, TEthPktFlags *flags)
{
return 0; // back to the library with the length of the UDP reply
}
/*
* main entry
*/
void main()
{
PORTA = 0 ;
TRISA = 0xff ; // set PORTA as input for ADC
PORTB = 0 ;
TRISB = 0xff ; // set PORTB as input for buttons
PORTD = 0 ;
TRISD = 0 ; // set PORTD as output
TRISB0_bit = 0; // B port láb kimenetre állítva
/*
* reset bit on RC0
* CS bit on RC1
* my MAC & IP address
* full duplex
*/
SPI1_Init();
SPI_Ethernet_Init(myMacAddr, myIpAddr, Spi_Ethernet_FULLDUPLEX) ;
while(1)
{ // do forever
SPI_Ethernet_doPacket() ; // process incoming Ethernet packets
}
}
Valakinek ötlet esetleg? A hozzászólás módosítva: Márc 29, 2015
Az elso if az 59. sorban az ugye nem 'C' kod, nem szolok hozza, nem tudom, hogy a bongeszodben futo Script mit tud a PIC port allapotarol. Azt latom, hogy a dinamikusan generalt szovegben elofordul a PORTB=nn; resz, ahol nn a PORTB erteke decimalisan, de hogy a PORTB.F0 mit jelent a javascriptnek, azt nem tudom.
A masodik (143. sor) már 'C' kod, de egy 1 bites bitfield erteke sosem lesz 48. Felteve, hogy a PORTB.F0 az egy egybites bitfield. Namost a 48 meg onnan jon, hogy a '0' az a nulla karakter ASCII kodja, ami 48.
Az "if(PORTB.F0 == 0)\"{\ az nem javascript, hanem a főprogram része. (kellene, hogy legyen, hogy működjön is)
Oda kellene valami még mert ezt így nem fogja értelmezni sem a fordító sem pedig a HTML.
Ott be kellene zárni a HTML tagot majd a főprogram vagy is az if() feltétel után ismét folytatni a HTML tagot.
Annak az if() feltételnek az lenne az eredménye, hogy színezze és a feltétel teljesülése eredményének fényébe a "Bekapcsolva" avagy a "Kikapcsolva" feliratot jelenítené meg a HTML oldal.
A 143. sor pedig nem szám értéknek kellene lennie? (decimális, bináris vagy hexa)
Az biztos jó lehet, hogy ASCII ellenőrzi port tartamát?
Szerintem az ott ilyennek kellene lennie: (Nem biztos csak tipp)
A hozzászólás módosítva: Márc 29, 2015
|
|