invertierten UART Empfangen mit Atmega88

#2049542
Lesenswert?

Hi,

ich möchte UART gern in Software invertieren (Empfang).

Dazu verbinde ich die UART Leitung mit Pin D2 und verbinde Pin C5 mit 
RXD.

Immer wenn wenn ein Pin change auf D2 kommt, ändere ich C5 was dann in 
den RXD Pin geht.

Problem ist: es kommt hin und wieder zu bitfehlern (selten, aber sie 
kommen), die nicht auftreten wenn ich die invertierung in hardware 
mache.

Das ist der Code:


ISR(PCINT2_vect)
{
    if(PIND & (1<<PIND2))
    {
        PORTC &= ~(1<<PORTC5);
    }
    else
    {
        PORTC |= (1<<PORTC5);
    }
}


void PCINT_Init()
{
    PCMSK2 |= (1<<PCINT18); // D2
    PCICR |= (1<<PCIE2);
}


Jemand ne Idee ?


Grüsse
Sebastian
Gast #2049559
Lesenswert?

Ufff, so irre Idee hab ich noch nie gesehen.
Klar daß das Probleme machen kann. Ein Hardware Inverter
braucht gerade mal die Gatterlaufzeit, einige ns.
Per SW umdrehen, das dauert unterschiedlich lange,
jenach dem wann der Int kommt. Es muß ja noch der vorige
Befehl abgearbeitet werden, das kann dann schon mal
die Flanke des Signals um 1µs..2µs verschieben,
kommt halt auf die Clock-Frequenz des µC an.
Und das ist je nach Baudrate halt zu viel.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren