Advertisement
Pagoniusz

Untitled

Mar 24th, 2015
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.71 KB | None | 0 0
  1. 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ł.)
  2. #include <p18f4520.h>
  3. #include <delays.h>
  4. #include <i2c.h>
  5. #include "xlcd.h"
  6.  
  7. #pragma config WDT = OFF
  8.  
  9. int i;
  10. char tmp;
  11.  
  12. void initXLCD(void);
  13. void txtXLCD(void);
  14. void iniI2C(void);
  15. char readTemp(void);
  16. void showResults(char c);
  17.  
  18. void iniI2C(void) {
  19.     // Inicjalizacja I2C - sami to wypełniamy
  20.  
  21.     // ŁATWIEJSZY SPOSÓB
  22.     // OpenI2C(MASTER, SLEW_OFF);
  23.     // SSPADD = 0x09;
  24.      
  25.     // TRUDNIEJSZY SPOSÓB
  26.     SSPCON1 = 0x28;
  27.     SSPSTAT = 0x80;
  28.     SSPADD = 0x09;
  29.      
  30.     // RESZTA INICJALIZACJI
  31.     StartI2C();
  32.     // adres termometru to 1001 101<coś> (tutaj <coś> to 0, bo zapis), czyli 0x9A
  33.     WriteI2C(0x9A);
  34.     // 00, bo tylko odczytujemy temperaturę (TC74.pdf, strona 8 albo <!-- m --><a class="postlink" href="http://embedded-lab.com/blog/?p=3146&#41;">http://embedded-lab.com/blog/?p=3146&#41;</a><!-- m -->
  35.     WriteI2C(0x00);
  36.     StopI2C();
  37.      
  38. }
  39.  
  40. char readTemp(void) {
  41.     tmp = 0x00;
  42.     // Odczyt temperatury - sami to wypełniamy
  43.     // tmp = SSPBUF
  44.      
  45.     StartI2C();
  46.      
  47.     // adres termometra to 1001 101<coś> (tutaj <coś> to 1, bo odczyt), czyli 0x9B
  48.     WriteI2C(0x9B);
  49.      
  50.     tmp = ReadI2C();
  51.     StopI2C();
  52.  
  53.     return tmp;
  54. }
  55.  
  56. void showResults(char c) {
  57.     // Wyświetlenie binarnie  
  58.     // zawartości rejestru SSPBUF
  59.     WriteCmdXLCD(0x87);
  60.     DelayXLCD();
  61.     for(i = 7; i >=0; i--) {
  62.         while(BusyXLCD());
  63.         putcXLCD(((c >> i) & 0B0000001) + 0x30);
  64.     }
  65.      
  66.     // Wyświetlenie temperatury  
  67.     // w stopniach Celsjusza - tego nie robilismy
  68.     // zsdj (np. -25, 14, 110)
  69.  
  70.     /* Uzupełnij brakujące fragmenty kodu */
  71.  
  72.     // WriteCmdXLCD(0xCB);
  73.     // DelayXLCD();
  74.     // while(BusyXLCD());
  75.     // putcXLCD(/*'-' dla temp. < 0, ' ' dla temp. > 0 */);
  76.     // while(BusyXLCD());
  77.     // putcXLCD(/* liczba setk */);
  78.     // while(BusyXLCD());
  79.     // putcXLCD(/* liczba dziesiątek */);
  80.     // while(BusyXLCD());
  81.     // putcXLCD(/* liczba jedności */);
  82.     // while(BusyXLCD());
  83.     // putcXLCD(0xDF);
  84.     // DelayXLCD();
  85.     // while(BusyXLCD());
  86.     // putrsXLCD("C ");
  87. }
  88.  
  89. void main() {
  90.  
  91.     initXLCD();
  92.     txtXLCD();
  93.     iniI2C();
  94.  
  95.     while(1) {      
  96.         tmp = readTemp();
  97.         showResults(tmp);
  98.         Delay10KTCYx(100);
  99.     }
  100.  
  101. }
  102.  
  103. **************************************************************************************************************************
  104. WriteI2C(0x9A);
  105. // 00, bo tylko odczytujemy temperaturę (TC74.pdf, strona 8 albo <!-- m --><a class="postlink" href="http://embedded-lab.com/blog/?p=3146&#41;">http://embedded-lab.com/blog/?p=3146&#41;</a><!-- m -->
  106. WriteI2C(0x00);
  107.  
  108. 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.
  109. *************************************************************************************************************************
  110. WriteI2C(0x9A);
  111. WriteI2C(0x00);
  112.  
  113. 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.)
  114.  
  115. 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
  116.  
  117. BTW nie ma to jak parsowanie linków przez forum... Tylko dlaczego w kodzie? ;)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement