Pages: [1]   Go Down
Author Topic: Lettura pin attiny85  (Read 350 times)
0 Members and 1 Guest are viewing this topic.
Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve ho 2 sketch dove leggo lo stato dei pin di un attiny85 e lo invio via seriale.
Il problema è che il primo sketch funziona regolarmente il secondo (dove leggo i pin tutti insieme attraverso la portb) non funziona e da valori a caso, ogni tanto trova uno stato alto quando non dovrebbe e viceversa e sembra essere più lento ad inviare le informazioni via seriale.
Ovviamente il collegamento elettrico è lo stesso.

Premetto che con arduino funziona regolarmente.

Allego gli sketch.

Dove sbaglio?
Grazie

Code:
#include <SoftwareSerial.h>
#include <avr/power.h>

const byte rx=3;
const byte tx=4;  //Pin 3
SoftwareSerial mySerial(rx, tx); // RX, TX
const byte x = 0;
const byte y = 1;
const byte z = 2;

void setup() 
{
  power_adc_disable();

  // set the data rate for the SoftwareSerial port
  mySerial.begin(57600);
  pinMode(x, INPUT);
  pinMode(y, INPUT);
  pinMode(z, INPUT);
}

void loop() // run over and over

  // definizione della struttura
  union RTX_b
  {
    unsigned char toSendByte;
    struct PinStato
    {
unsigned char x:
      1;
unsigned char z:
      1;
unsigned char y:
      1;
unsigned char Bit4:
      1;
unsigned char Bit5:
      1;
unsigned char Bit6:
      1;
unsigned char Bit7:
      1;
unsigned char Bit8:
      1;
    }
    Bits;
  }
  RTX_data;


  RTX_data.Bits.x = digitalRead(x);
  RTX_data.Bits.z = digitalRead(z);
  RTX_data.Bits.y = digitalRead(y);

  mySerial.write(RTX_data.toSendByte);
}




Code:
#include <SoftwareSerial.h>
#include <avr/power.h>

const byte rx=3;
const byte tx=4;  //Pin 3
SoftwareSerial mySerial(rx, tx); // RX, TX

void setup()  
{
  power_adc_disable();

  // set the data rate for the SoftwareSerial port
  mySerial.begin(57600);
  DDRB = B00010000; // Pin 4 come output, il primo pin a x è l'0
}

void loop() // run over and over
{  
  // definizione della struttura
  union RTX_b
  {
    unsigned char toSendByte;
    struct PinStato
    {
unsigned char x:
      1;
unsigned char z:
      1;
unsigned char y:
      1;
unsigned char Bit4:
      1;
unsigned char Bit5:
      1;
unsigned char Bit6:
      1;
unsigned char Bit7:
      1;
unsigned char Bit8:
      1;
    }
    Bits;
  }
  RTX_data;
  RTX_data.toSendByte=0;

  RTX_data.toSendByte = PINB & B00000111;
  
  mySerial.write(RTX_data.toSendByte);
}

Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Da quello che ho potuto capire l'ide di arduino non gestisce bene la lettura/scrittura della porta portb di attiny85.
Con le classiche digitaRead/digitalWrite non ho problemi.

Se ne sapete di più.
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21650
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ho mai usato la manipolazione diretta delle porte sui Tiny85 ma come cosa mi suona un po' strana.
Hai provato a fare un semplice Blink impostato su HIGH e LOW un pin mediante i registri, per vedere se è come dici tu oppure no? Se la cosa fosse confermata, sarebbe un bug non da poco (riguarderebbe avr-gcc). Alquanto improbabile ma non impossibile.
Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-roll-blue Bell'idea domani ci provo.

Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Contrordine l'errore era tutto mio.

Risolto. Grazie.

Per la cronaca il test del blink l'ho fatto e funziona regolarmente.
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21650
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Gli errori capitano a tutti  smiley-wink
Logged


Pages: [1]   Go Up
Jump to: