Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Musieliśmy odczytać temperaturę z termometru (taka malutka czarna kosteczka mniej więcej wielkości tej litery z) po magistrali IIC i wyświetlić binarnie na wyświetlaczu. (Dziesiętnie już nie, bo facet się spieszył.)
- #include <p18f4520.h>
- #include <delays.h>
- #include <i2c.h>
- #include "xlcd.h"
- #pragma config WDT = OFF
- int i;
- char tmp;
- void initXLCD(void);
- void txtXLCD(void);
- void iniI2C(void);
- char readTemp(void);
- void showResults(char c);
- void iniI2C(void) {
- // Inicjalizacja I2C - sami to wypełniamy
- // ŁATWIEJSZY SPOSÓB
- // OpenI2C(MASTER, SLEW_OFF);
- // SSPADD = 0x09;
- // TRUDNIEJSZY SPOSÓB
- SSPCON1 = 0x28;
- SSPSTAT = 0x80;
- SSPADD = 0x09;
- // RESZTA INICJALIZACJI
- StartI2C();
- // adres termometru to 1001 101<coś> (tutaj <coś> to 0, bo zapis), czyli 0x9A
- WriteI2C(0x9A);
- // 00, bo tylko odczytujemy temperaturę (TC74.pdf, strona 8 albo <!-- m --><a class="postlink" href="http://embedded-lab.com/blog/?p=3146)">http://embedded-lab.com/blog/?p=3146)</a><!-- m -->
- WriteI2C(0x00);
- StopI2C();
- }
- char readTemp(void) {
- tmp = 0x00;
- // Odczyt temperatury - sami to wypełniamy
- // tmp = SSPBUF
- StartI2C();
- // adres termometra to 1001 101<coś> (tutaj <coś> to 1, bo odczyt), czyli 0x9B
- WriteI2C(0x9B);
- tmp = ReadI2C();
- StopI2C();
- return tmp;
- }
- void showResults(char c) {
- // Wyświetlenie binarnie
- // zawartości rejestru SSPBUF
- WriteCmdXLCD(0x87);
- DelayXLCD();
- for(i = 7; i >=0; i--) {
- while(BusyXLCD());
- putcXLCD(((c >> i) & 0B0000001) + 0x30);
- }
- // Wyświetlenie temperatury
- // w stopniach Celsjusza - tego nie robilismy
- // zsdj (np. -25, 14, 110)
- /* Uzupełnij brakujące fragmenty kodu */
- // WriteCmdXLCD(0xCB);
- // DelayXLCD();
- // while(BusyXLCD());
- // putcXLCD(/*'-' dla temp. < 0, ' ' dla temp. > 0 */);
- // while(BusyXLCD());
- // putcXLCD(/* liczba setk */);
- // while(BusyXLCD());
- // putcXLCD(/* liczba dziesiątek */);
- // while(BusyXLCD());
- // putcXLCD(/* liczba jedności */);
- // while(BusyXLCD());
- // putcXLCD(0xDF);
- // DelayXLCD();
- // while(BusyXLCD());
- // putrsXLCD("C ");
- }
- void main() {
- initXLCD();
- txtXLCD();
- iniI2C();
- while(1) {
- tmp = readTemp();
- showResults(tmp);
- Delay10KTCYx(100);
- }
- }
- **************************************************************************************************************************
- WriteI2C(0x9A);
- // 00, bo tylko odczytujemy temperaturę (TC74.pdf, strona 8 albo <!-- m --><a class="postlink" href="http://embedded-lab.com/blog/?p=3146)">http://embedded-lab.com/blog/?p=3146)</a><!-- m -->
- WriteI2C(0x00);
- To wywalcie, nam mówił że wszyscy to dają i nie wie czemu. Przez to mieliśmy problem i musieliśmy zmieniać programator bo coś się poprzestawiało.
- *************************************************************************************************************************
- WriteI2C(0x9A);
- WriteI2C(0x00);
- A nam mówił, że musimy to napisać, bo inaczej termometr nie wie co ma robić. (Tyle w teorii, w praktyce powinien pamiętać swoje ustawienia po poprzednich grupach.)
- U nas komuś też się coś przestawiło (ale to dlatego, że wcześniej wysyłali bzdury na tą szynę IIC) i dobry program nie chciał działać. Prowadzący podszedł, odłączył i podłączył zasilanie układu i wszystko zaczęło działać. A wszyscy to dają pewnie dlatego, że ja to dałem XD
- BTW nie ma to jak parsowanie linków przez forum... Tylko dlaczego w kodzie? ;)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement