Go Down

Topic: Problem mit ATTiny85, das ich mit dem 84 nicht hab (Read 485 times) previous topic - next topic

magictrips

Hallo Zusammen,

ich hoffe ihr könnt mir helfen ?

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.


Code: [Select]
#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;
}

ardubu

der ADC0 liegt auf dem Resetpin, darum würde ich ihn nicht benutzen, nehme lieber A2 oder A3

uxomm

An welchem physikalischen Pin führst du denn die Messung durch?

Code: [Select]
ATtiny 13/25/45/85
                ------
         Reset |1    8| Vcc
     ADC3, PB3 |2    7| PB2, SCL, ADC1
     ADC2, PB4 |3    6| PB1, MISO, PWM
           GND |4    5| PB0, MOSI, PWM
                ------



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

Code: [Select]
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).

Das ist manchmal ein wenig verwirrend... :)
Always decouple electronic circuitry.

magictrips

Danke !

ich befürchte ihr habt recht !

Dafür hab ich jetzt ein neues "Problem".

Auf dem physikalischen Pin 2 und 3 hab ich ein 16MHz Quarz und 5 und 7 mit I2C belegt......

Hat das Quarz denn auswirkungen auf die Genauigkeit der Messung ?

Weil sonst würde ich das eifnach weglassen......

Serenifly

Der RC-Oszillator ist natürlich ungenauer aber reicht meistens

magictrips

Danke !

sollte schon so genau, wie möglich sein....

Der Sensor liefert bis 4,7V.

das ganze wird dann so umgerechnet (geht um Differenzdruck):

vp_difference = map(analogRead(vp_Pin), 37, 962, 0, 1000);

also 1 Tick = 1,08Bar.........

meinst du, da reicht der RC-Oszillator aus ?


Klaus_ww

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.
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

Serenifly

#7
Jul 09, 2016, 05:21 pm Last Edit: Jul 09, 2016, 05:56 pm by Serenifly
Der Takt bestimmt nur wie schnell der ADC ist. Am Ende kommt aber das gleiche raus.

magictrips

Ok, Danke !

Dann passt das ja ! Dann nehme ich den Quarz raus (:

ardubu

denk dran, das du erst die Fuses auf 8MHz internal setzt

Go Up