harmichalh napisał: Oto mój kod:
#include <avr/io.h>
typedef union {
uint8_t bajt;
struct {
uint8_t z0: 1;
uint8_t z1: 1;
uint8_t z2: 1;
uint8_t z3: 1;
uint8_t z4: 1;
uint8_t z5: 1;
uint8_t z6: 1;
uint8_t z7: 1;
} bit;
} polebitowe;
int main(){
DDRA = 0;
DDRC = 255;
PORTA = 0;
PORTC = 0;
polebitowe PB;
while(1){
PB.bajt = PINA;
if( PB.bit.z0 == 1 )PORTC = 1;
else PORTC = 2;
}
return 0;
}
Niestety niezależnie od wartości portu LPT świeci dioda podłączona do pinu PC7. Przewodem połączyłem D0 (z LPT) z pinem PA0 mojego mikrokontrolera i drugim przewodem gnd lpt z gnd mikrokontrolera. Gdy gnd nie jest podpięte świecą obie diody, czego nie rozumiem. Jak mogę przesyłać dane z LPT do mikrokontrolera?
A jak wg ciebie ma się nie świecić. Chociaż tak na prawdę to zadając takie pytanie wypadałoby narysować schemat tego swojego połączenia a nie robić opisy z których mało wynika i sporo trzeba się domyślać. Jednak pomimo to spróbuję się domyślić że dioda podłączona do pinu PC7 jest podłączona katodą a anodą przez rezystor do VCC.
W związku z powyższym sterowana jest stanem niskim czyli zerem.
Jak więc chcesz żeby na podstawie tego kodu miała się ona włączać albo wyłączać ???
Zaloguj się, aby zobaczyć kod
Przecież zapalasz tylko albo gasisz diody podłączone do pinów albo PC0 albo PC1. Co ma z tym wspólnego PC7 ????
Dlatego w pewnej książce od początku sugeruję wszystkim żeby nauczyli się stosować poprawne techniki programowania i w takich przypadkach posługiwali się przesunięciami bitowymi do kodu programu. To stosuje się nie tylko dla jakiejś tam teoretycznej zasady dobrego programowania ale po to żeby samemu było wygodnie pisać kod.
A tu jest właśnie taki idealny przykład jak się nie powinno programować no i przy okazji przykład dlaczego - bo sam autor się myli już w określeniu pinu dla diody LED.
Ja bym to napisał np tak:
Zaloguj się, aby zobaczyć kod
Dodano po 1 [minuty]:
aha - to
return 0; na końcu jest niepotrzebne
Dodano po 2 [minuty]:
harmichalh napisał: Gdy gnd nie jest podpięte świecą obie diody, czego nie rozumiem. Jak mogę przesyłać dane z LPT do mikrokontrolera?
I to jest pierwszy krok do uszkodzenia swojego portu LPT gdy nie łączysz masy - zresztą nie tylko LPT ale i być może nawet mikrokontrolera. Więc nie radzę tak robić. Ani nawet podłączać tego w trakcie działania. Najlepiej połączyć LPT z układem - tzn sygnały i masę - a potem włączyć dopiero urządzenie z mikrokontrolerem.
Dlaczego wtedy świecą ci obie diody - nawet nie ma co się zastanawiać. Dobrze, że dym nie leci

gdy masy nie są połączone.