Advertisement
Guest User

I²C Lesen

a guest
Feb 21st, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.24 KB | None | 0 0
  1.  
  2. #include "typeDef.c"
  3. // include the library code:
  4. #include <LiquidCrystal.h>
  5.  
  6. // initialize the library with the numbers of the interface pins
  7. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  8. #define sda REGISTER_BIT(PORTB,4) //PORT-Register beim schreiben
  9. #define sdain REGISTER_BIT(PINB,4)//PIN-Register beim lesen, Änderung in Funktion bitein falls notwendig
  10. #define scl REGISTER_BIT(PORTB,5) //PORT-Register beim schreiben
  11. #define tsda REGISTER_BIT(DDRB,4) //DDR-Register für die Datenrichtung
  12. #define tscl REGISTER_BIT(DDRB,5) //DDR-Register für die Datenrichtung
  13.      
  14. //#include "IICAtmega328P.c"
  15.  
  16. int zeit = 1;
  17. //void bstart(void);
  18. void setup() {
  19.   lcd.begin(16, 2);                 //start des LCDs mit 16 Zeichen auf 2 Zeilen
  20. }
  21.  
  22. void bstart(void)    // Startbedingung generieren
  23. {
  24. sda=1;
  25. tsda=1;         //sda,scl-Ausgänge
  26. tscl=1;
  27. scl=0;
  28. delay(zeit);
  29. scl=1;
  30. delay(zeit);
  31. delay(zeit);
  32. delay(zeit);
  33. delay(zeit);
  34. sda=0;
  35. delay(zeit);
  36. delay(zeit);
  37. delay(zeit);
  38. delay(zeit);
  39. delay(zeit);
  40. scl=0;
  41. delay(zeit);
  42. delay(zeit);
  43. }
  44. void bstop(void)    // Stopbedingung generieren
  45. {
  46. tsda=1;         //sda,scl-Ausg�nge
  47. sda=0;
  48. delay(zeit);
  49. delay(zeit);
  50. delay(zeit);
  51. scl= 1;
  52. delay(zeit);
  53. delay(zeit);
  54. delay(zeit);
  55. sda=1;
  56. delay(zeit);
  57. delay(zeit);
  58. scl= 0;           //? eigentlich hochomig machen
  59. delay(zeit);
  60. delay(zeit);
  61. delay(zeit);
  62. }
  63.  
  64. unsigned char bitein (void)   // Ein Bit Einlesen
  65. {
  66. Bitvar din;
  67. tsda=0;         //sda input
  68. tscl=1;
  69. sda=1;          // braucht man nicht
  70. scl=1;
  71. delay(zeit);
  72. delay(zeit);
  73. delay(zeit);
  74. delay(zeit);
  75. delay(zeit);
  76. din.b0=sda;         //Notfalls in Pin-Register ändern
  77. scl=0;
  78. return din.asByte;
  79. }
  80.  
  81. void bitaus (Bitvar dout) // Ein Bit Schreiben
  82. {
  83. Bitvar out;
  84. out.asByte = dout.asByte;
  85. tsda=1;         //sda output
  86. sda=out.b7;
  87. delay(zeit);
  88. scl=1;
  89. delay(zeit);
  90. delay(zeit);
  91. delay(zeit);
  92. delay(zeit);
  93. scl=0;
  94. }
  95.  
  96. unsigned char lesen(void)   // Byte empfangen
  97. {
  98. Bitvar DATEIN;
  99. unsigned char i;
  100. for(i=0;i<8;i++)
  101.   {
  102.   DATEIN.asByte =DATEIN.asByte<<1;
  103.   if( bitein() == 1 ) DATEIN.b0=1;
  104.   }
  105. return DATEIN.asByte;
  106. }
  107.  
  108. unsigned char schreib (unsigned char dout)
  109. {
  110. unsigned char i ;
  111. Bitvar DATOUT;
  112. DATOUT.asByte = dout;
  113.   for(i=0;i<8;i++)
  114.   {
  115.    //bitaus(DATOUT.asByte);
  116.   tsda=1;         //sda output
  117.   sda = DATOUT.b7;
  118.   delay(zeit);
  119.   scl=1;
  120.   delay(zeit);
  121.   delay(zeit);
  122.   delay(zeit);
  123.   delay(zeit);
  124.   scl=0;
  125.   DATOUT.asByte = DATOUT.asByte << 1;
  126.   }
  127. return bitein();          //if din=1 dan fehler
  128. }
  129. //#include "IICAtmega328P.c"
  130.  
  131. void loop() {
  132.  
  133.     bstart();                      // Start - Bedingung einstellen
  134.     schreib(0b01000000);           // Bauteiladresse senden zum Schreiben/letztes Bit = 1 wenn lesen
  135.    
  136.     int x=1;
  137.     int z;                
  138.     for(x; x<=128; )
  139.     {
  140.        lcd.setCursor(3,0);              // Setzt die Position auf Zeichen 3 in Zeile 1
  141.        int y = 255-x;
  142.        z= 255-y;
  143.        lcd.print(z);                    // Ausgabe von z auf LCD
  144.        x=x+x;
  145.        schreib(y);                      // Datenbyte beschreiben
  146.        delay(1000);                     // 1 Sekunde warten
  147.     }
  148.     lcd.clear();                        // LCD leeren
  149.         bstop();                        // Stop - Bedingung einstellen
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement