Vorgesehen sind die Ports PA0..4.
Um den Bus von Port zu Port schalten versuche ich die Funktion 'ow_set_bus' zu nutzen.
In onewire.h habe ich unten eingefügt:
Code: Alles auswählen
#ifdef OW_ONE_BUS
#else
void ow_set_bus(volatile uint8_t*,
volatile uint8_t*,
volatile uint8_t*,
uint8_t);
#endif
//OW_ONE_BUS
Code: Alles auswählen
#if USE_OW
#include "1-Wire/onewire.h"
#endif
Code: Alles auswählen
void read_T(void)
{
//lese_Temperatur();
//machineStatus.LogSchreiben = true; // danach gleich Logdatei schreiben
//machineStatus.Timer3_func = NULL; // vorsichtshalber Funktion löschen.
switch (machineStatus.uiBusNr)
{
case 1: ow_set_bus(PINA,PORTA,DDRA,PA0);
lese_Temperatur(0);
lese_Temperatur(1);
machineStatus.uiBusNr=2;
break;
case 2: ow_set_bus(PINA,PORTA,DDRA,PA1);
lese_Temperatur(2);
lese_Temperatur(3);
machineStatus.uiBusNr=3;
break;
case 3: ow_set_bus(PINA,PORTA,DDRA,PA2);
lese_Temperatur(4);
lese_Temperatur(5);
machineStatus.uiBusNr=1;
machineStatus.LogSchreiben = true; //Logdatei schreiben
break;
default: machineStatus.uiBusNr=1;
}
machineStatus.Timer3_func = NULL; // vorsichtshalber Funktion löschen
...
In 'messung.c' habe ich in 'lese_Temperatur' die Schleife entfernt und auf Einzelbetrieb umgestellt:
Code: Alles auswählen
void lese_Temperatur(uint8_t uiIdIndex)
...
Wie muss der Aufruf korrekt erfolgen?
Warum 'volatile' und was hat es schon wieder mit der Zeigerei auf sich?
U.a. berreitet mir Kopfzerbrechen in 'onewire.c':
Code: Alles auswählen
/* set bus-config with ow_set_bus() */
uint8_t OW_PIN_MASK;
volatile uint8_t* OW_IN;
volatile uint8_t* OW_OUT;
volatile uint8_t* OW_DDR;
#define OW_GET_IN() ( *OW_IN & OW_PIN_MASK ) //& bitweises AND
#define OW_OUT_LOW() ( *OW_OUT &= (uint8_t) ~OW_PIN_MASK ) //~ bitweises NOT
#define OW_OUT_HIGH() ( *OW_OUT |= (uint8_t) OW_PIN_MASK ) //| bitweises OR
#define OW_DIR_IN() ( *OW_DDR &= (uint8_t) ~OW_PIN_MASK )
#define OW_DIR_OUT() ( *OW_DDR |= (uint8_t) OW_PIN_MASK )
void ow_set_bus(volatile uint8_t* in,
volatile uint8_t* out,
volatile uint8_t* ddr,
uint8_t pin)
{
OW_DDR=ddr;
OW_OUT=out;
OW_IN=in;
OW_PIN_MASK=(1<<pin);
ow_reset();
}