🇩🇪
Zitat von: vloki in 01.06.2021, 14:41:50 CESTDie MCLR Pins sind aber schon ordentlich beschaltet, bzw. deaktiviert?Hoffe, wir kommen hier nicht vom Fredthema ab....wäre wohl besser, einen eigenständigen Fred über Empfindlichkeit zu erstellen. Bis dahin...
 when the port pin is configured as an output. The pull-ups are disabled on a Power-on Reset."
 when the port pin is configured as an output. The pull-ups are disabled on a Power-on Reset."Zitat von: picass in 31.05.2021, 09:19:13 CESTDie MCLR Pins sind aber schon ordentlich beschaltet, bzw. deaktiviert?Zitat von: Peter in 29.05.2021, 21:47:36 CESTDachte nicht das die Pic Controller so empfindlich sind.... Dann fand ich raus, dass manchmal schon die Annäherung eines Fingers an den Sende-PIC reichte, um den zur Arbeit zu bewegen.
Zitat von: Peter in 29.05.2021, 21:47:36 CESTDachte nicht das die Pic Controller so empfindlich sind.Deine Problemschilderung erinnert mich an ein irgendwie ähnliches Erlebnis beim Experimentieren mit meiner Rollladenschaltung. Die Prototyp-Anlage aus drei Platinen - zwei davon enthalten je einen PIC - funktionierte, will sagen, der Datentransport via Kabel klappte. Aber gelegentlich startete eine Datenübermittlung vom sendenden PIC, obwohl keine Startbedingung (Taste / Portänderung) vorlag. Dann fand ich raus, dass manchmal schon die Annäherung eines Fingers an den Sende-PIC reichte, um den zur Arbeit zu bewegen. Es half da auch nur wenig, mit einer Hand in der Steckdose - also am Erdungsbügel - zu sein, und dieserart "eigentlich" die Elektrostatik ausgebremst zu haben. Dieses Phänomen habe ich noch nicht im Griff, mag sein, dass der nun bevorstehende Einbau in ein Alugehäuse da weiterhilft.
Zitat von: pic18 in 18.03.2021, 12:52:09 CETStimmt das Timing in der Abfrage? Ich meine -0,5°C sind lauter 1er im Datenbyte.Da könntest du recht habent. Auf jeden Fall ein guter Hinweis!
    LCD_Init();
    LCD_ConstTextOut(0,0,"DS18B20");
    LCD_ConstTextOut(1,0,"   .  ");LCD_CharOut(0x27);LCD_CharOut('C');
//----------------------------------------------------------------------- main()
    while(ds18x20_res()){
        ds18x20_wr(SKIP_ROM);
        ds18x20_wr(CONV_T);
        __delay_ms(750);
        ds18x20_res();
        ds18x20_wr(SKIP_ROM);
        ds18x20_wr(RD_SCRATCH);
//        __delay_ms(1);
        ds18x20_rdTemp();
        if(ds18x20.t_int < 0)
            LCD_ValueOut_00(1,0,ds18x20.t_int,2);
        else
            LCD_ValueOut_00(1,0,ds18x20.t_int,3);
        LCD_ValueOut_00(1,4,ds18x20.t_dec,1);
    }
    LCD_ConstTextOut(1,0," ERROR  ");
    while(1){;}
ds18x20_t ds18x20;
uint8_t ds18x20_data[9];
uint8_t ds18x20_res(void)
{
    uint8_t rec;
    
    DS18X20_OUT = 0;    // set the (I)O to low level
    DS18X20_DIR = 0;    // config as output (-> low)
    __delay_us(480);    // reset pulse >=480 us
    DS18X20_DIR = 1;    // config as input (high-z -> pull up)
    __delay_us(80);
    rec = ~DS18X20_IN;  // read the level (if low, slave available)
    __delay_us(400);    // wait for end of slot
    return (rec);
}
void ds18x20_wr(uint8_t value)
{
    for(uint8_t i = 0; i < 8; i++){
        DS18X20_DIR = 0;
        __delay_us(1);
        if(value & 0x01){ DS18X20_DIR = 1; }
        __delay_us(60);
        DS18X20_DIR = 1;
        value = value >> 1;
    }
}
uint8_t ds18x20_rd(void)
{
    uint8_t value = 0;
    
    for(uint8_t i = 0; i < 8; i++){
        DS18X20_DIR = 0;
        __delay_us(1);
        DS18X20_DIR = 1;
        __delay_us(9);
        value |= DS18X20_IN << i;
        __delay_us(51);             // 60+1 us minimum
    }
    return value;
}
int8_t ds18x20_rdTemp(void)
{
        for(uint8_t i = 0; i < 9; i++){
            ds18x20_data[i] = ds18x20_rd();
        }
        ds18x20.t_int = *(int16_t *)&ds18x20_data[0] >> 4;  
        ds18x20.t_dec = ((ds18x20_data[0] & 0x0F)*10) >> 4;
        if(ds18x20.t_int < 0)
            ds18x20.t_dec = 9 - ds18x20.t_dec;
        return ds18x20.t_int;
}
typedef enum {
    CONV_T          = 0x44,
    RD_SCRATCH      = 0xBE,
    WR_SCRATCH      = 0x4E,
    COPY_SCRATCH    = 0x48,
    RECALL_EE       = 0xB8,
    RD_PWR_SUPLY    = 0xB4,
    SKIP_ROM        = 0xCC,
    FIND_ROM        = 0xF0,
    RD_ROM          = 0x33,
    MATCH_ROM       = 0x55,
    FIND_ALRM       = 0xEC
}DS18x20_Command_t;
typedef struct{
    uint8_t  t_dec;
    int8_t t_int;
}ds18x20_t;