ich habe ein sehr einfachen Sketch geschrieben.
Dieser läuft auf dem ATTiny 84 problemlos, aber auf dem 85 nicht !
Und zwar wird einfach der Analogeingang gemessen und der Wert per I2C versendet.
Das Problem ist, das beim Empfänger (wenn ich es mit dem ATTiny85 als Sender versuche) "-1" ankommt und erst bei einer höheren Spannung dann ein anderer Wert.....so ab ca. 500......
für den ganzen bereich dazwischen wird -1 gesendet.
#include <TinyWireS.h>
#define I2C_Sensors_Address 0x25
// Druck Messwert
const byte vp_Pin = A0; // Pin
union data_u
{
unsigned long i[1];
byte b[sizeof(i)];
};
volatile data_u pressure;
volatile byte index;
void setup()
{
TinyWireS.begin(I2C_Sensors_Address);
TinyWireS.onRequest(requestEvent);
pressure.i[0] = 1000;
analogReference(DEFAULT);
delay(200);
}
void loop()
{
// Unterdrucksensor auslesen (Analogread dauert 100µs)
noInterrupts(); // Was hierzwischen passiert möglichst kurz halten ! da dies auch zu einer Verzögerung beim Master führen kann
pressure.i[0] = analogRead(vp_Pin);
interrupts();
}
void requestEvent()
{
TinyWireS.send(pressure.b[index]);
index++;
if (index >= sizeof(pressure.b))
index = 0;
}
Analogmessungen sind auf phys. Pin 2, 3 und 7 möglich (ADC...).
Wie diese "heißen" hängt von der Core an, die du für den ATtiny85 verwendest.
Zumindest bei der die ich verwende heißen die dann
analogRead(1); // das ist phys. Pin 7
analogRead(2); // das ist phys. Pin 3
analogRead(3); // das ist phys. Pin 2
Also bei mir funktioniert das mit A0 etc. nicht sondern nur mit 1, 2 und 3 (siehe ADC1, ADC2, ADC3).
Naja, der Takt hat ja nix mit der Genauigkeit des ADCs zu tun. Der kommt mehr in's Spiel, wenn's um Timing geht. Und anpassen läßt er sich in Grenzen ja auch.
Also hau den Quarz raus, nimm den internen Oszillator und alles wird fein sein denke ich.