Moin, ich bin hier bei meinen ersten Gehversuchen mit i2c. Aber ich komme nicht mehr weiter. Folgenden Quellcode habe ich erstellt. Nur leider gibt der pcf8574p nichts aus. Kann einer von euch sehen ob da irgendwo ein Bock drinn ist ? Hardwaremäßig müsste alles richtig angeschlossen sein incl. pullupwiderstände würd mich freuen wenn wer nen Tipp hat danke Henning
1 | #include<util/delay.h> |
2 | |
3 | |
4 | int sendByte(unsigned char datenbyte, unsigned char adresse) |
5 | {
|
6 | DDRC &= !((1<<DD4)|(1<<DD5)); |
7 | PORTC = (1<<DD4)|(1<<DD5); |
8 | |
9 | TWCR = ((1<<TWINT)|(1<<TWSTA)|(1<<TWEN)); //TWI aktivieren und Start auslösen |
10 | while(!(TWCR & (1<<TWINT))); // warten auf Start |
11 | |
12 | |
13 | TWDR = adresse & (0xFE); // Adresse und Schreibbit ins Datenregister |
14 | TWCR = ((1<<TWINT)|(1<<TWEN)); // senden ... |
15 | while(!(TWCR & (1<<TWINT))); |
16 | |
17 | |
18 | TWDR=datenbyte; // Byte ins Datenregister |
19 | TWCR = ((1<<TWINT)|(1<<TWEN)); // senden ... |
20 | while(!(TWCR& (1<<TWINT))); |
21 | |
22 | |
23 | TWCR = ((1<<TWINT)|(1<<TWSTO)|(1<<TWEN)); // Stop |
24 | return 1; |
25 | }
|
26 | |
27 | |
28 | |
29 | void main (void) |
30 | {
|
31 | unsigned char i; |
32 | i=0x01; |
33 | while(1) |
34 | {
|
35 | if(i==0x80) i=0x01; |
36 | else i<<=1; |
37 | |
38 | _delay_ms(150); |
39 | |
40 | sendByte(i,0); |
41 | }
|
42 | }
|