Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <util/twi.h>
- /*Verbindung der Arduinos
- * beide mit GND
- * PC4 (M) mit PC4 (S)
- * PC5 (M) mit PC5 (S)
- *
- */
- #define SENSOR A1
- void ERROR();
- int main()
- {
- init();
- Serial.begin (9600);
- //EIGENE Slave Adresse setzen, da hier Arduino selbst im Slave-Modus
- uint8_t SLA= 2;
- TWAR = SLA <<1; // letztes Bit für General Call
- //Slave aktivieren; ACK für eigenen Adressenempfang
- TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA);
- //Sensor konfigurieren, internen AD Wandler aktivieren
- DDRC &=~(1<<DDC1);
- ADCSRA|= (1<<ADEN); //ADC aktivieren
- ADCSRA |=(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //Teilungsfaktor
- ADMUX |= (1<<MUX0); //Kanal
- ADMUX |=(1<<REFS0); //interne 5V als Referenzspannung
- uint8_t sensor_val;//= PINC & (1<<PINC0) ;
- while(1)
- {
- //Warten
- while (!(TWCR & (1 << TWINT)));
- //Status: Adresse empfangen?
- if (TW_STATUS != TW_ST_SLA_ACK) ERROR();
- //Daten senden, NACK (erwarten des letzten Pakets)
- ADCSRA|=(1<<ADSC);//Wandlung starten
- while(ADCSRA&(1<<ADSC)); //auf wandlungsende warten
- sensor_val=ADC;
- TWDR=sensor_val;
- TWCR=(1<<TWINT)|(1<<TWEN);
- //Warten
- while (!(TWCR & (1 << TWINT)));
- //Status: Bestätigung der Daten vom Master?
- if(TW_STATUS != TW_ST_DATA_NACK) ERROR();
- //Slave aktivieren
- TWCR = (1 << TWINT) | (1 << TWEA) | (1 << TWEN);
- Serial.println(sensor_val);
- }
- }
- void ERROR()
- {
- Serial.print ("TWCR: ");
- Serial.println (TWCR,BIN);
- Serial.print ("TW_STATUS: ");
- Serial.println (TW_STATUS, BIN);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement