75160 - Ansteuerungsproblem - mysteriöse Pegel!

Gast #1241267
Lesenswert?

Hi,

ich habe derzeit ein GPIB Projekt am laufen. Die Treiber sind nach 
längeren Recherchieren der 75160 und 75161 geworden. Soweit nichts 
besonderes :)
Allerdings verhält sich der 75160 sehr komisch (den 161er konnte ich 
noch nicht testen, weil ich ihn noch nicht habe).
Ich habe alles verdrahtet, und die IOs des at90usb zum Test auf High / 
Low gelegt. bei High erhalte ich normale Pegel, bei Low komme ich so auf 
1-1,5V runter. Komisch, ist vielleicht ein zu starker Pullup für mich in 
dem IC verbaut... kann aber doch eigentlich nicht sein?! Der einzige 
Input den ich anständig auf 0V treiben kann ist Pin 19 (D1). Warum 
gerade dieser geht ist mir ein Rätsel.
Hänge ich den at90usb komplett ab und habe quasi nur noch die 
Stromversorgung + TE / PE am IC, so sind die Inputs ebenso auf einem 
Wert in dieser Gegend. Glaube es waren 1,8V, die ich gemessen hatte.
Ziehe ich den Input des 75160 selbst (mittels Drahtbrück) runter, so 
funktioniert es, es deutet also eigentlich auf eine Fehleinstellung im 
Atmega hin.
Mache ich etwas an der Beschaltung verkehrt? Kann mein at90usb den 
Treiber nicht treiben (skuril eigentlich..., ist ja nur Logik?!). 
Brauche ich noch zusätzliche Pullups / Downs oders sonstige Bauteile?

Meine Beschaltung im Moment ist recht einfach: IO-Pads ==> Input 75160
TE ist natürlich auf 1, also Enable, PE habe ich mit 1 (3-state) und 0 
(pullup) probiert, keine Verbesserung.

VIELEN DANK!
Gast #1241815
Lesenswert?

Hi,

dank dir erstmal für die Antwort. Daran habe ich auch schon gedacht, 
aber meiner Meinung nach müsste das stimmen:

Die defines in der *.h:
#define DIO_DIRECTION_REGISTER  DDRA
#define DIO_PORT        PORTA
#define S75160_DIRECTION_REGISTER  DDRD
#define S75160_PORT          PORTD
#define S75160_TE          0
#define S75160_PE          1

in der init Funktion der *.c
DIO_DIRECTION_REGISTER = 1;
S75160_DIRECTION_REGISTER |= (1 << S75160_TE) | (1 << S75160_PE);
S75161_DIRECTION_REGISTER |= (1 << S75161_TE) | (1 << S75161_DC);
S75160_PORT &= ~(1 << S75160_TE);
S75160_PORT &= ~(1 << S75160_PE);


in der "sende byte" methode:
S75160_PORT |= (1<< S75160_TE);
DIO_PORT = cmd;  //cmd ist das übergebene byte
...
S75160_PORT &= ~(1<< S75160_TE);

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