mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Parallel Port Problem


Autor: Elbegucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen
ich habe folgende Schaltung:
Es werden die über den Parallel Port geschickten Daten vom 
Mikrocontroller auf ein EEPROM geschrieben (funktioniert). Diese sollen 
später bei Knopfdruck über Usart ausgeben werden (funktioniert auch).

Nun habe ich das Problem, dass die Daten nur über Usart geschickt 
werden, wenn ein Druckerkabel angeschlossen ist.
Woran kann das liegen? Kann es an der Definition der Portrichtung 
liegen? Ein kompletter Port ist als Eingang definiert.

Nur zur Übersicht der Signalleitungen und der Funktionsweise:

http://www.goblack.de/desy/digitalt/par-schnittste...
http://www.netzmafia.de/skripten/hardware/rp1/rp12.html

Ich nutze hauptsächlich neben den Datenleitungen Strobe, Busy, Select.
Busy und Select sind als Ausgang definiert.

Bei fallender Flanke von Strobe wird ein Interrupt ausgelöst.
Oder liegt es evt. daran, dass an Strobe bei nicht vorhandenem 
Druckerkabel kein definiertes Signal ist?

Wie kann ich das Problem Schaltungs- oder Softwaretechnisch lösen?

Ich verwende ATMega32.

Gruß Elbegucker

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Elbegucker (Gast)

>Nun habe ich das Problem, dass die Daten nur über Usart geschickt
>werden, wenn ein Druckerkabel angeschlossen ist.

Masse (GND) am seriellen Port nicht angeschlossen?

>liegen? Ein kompletter Port ist als Eingang definiert.

Interne oder externe Pull-Ups benutzt?

MFG
Falk

Autor: Elbegucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gnd am seriellen Port ist angeschlossen
keine externe pull-ups verwendet

Autor: Elbegucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe gerade noch bemerkt, dass die Schaltung reagiert (exterene 
Interrupt auslöst) wenn ich an die Strobe -Leitung mit meinem Finger 
komme.
Dadurch werden daten aufs Eeeprom geschrieben, was nicht passieren 
sollte.
was mach ich dagegen?

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nicht anfassen ;-)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Elbegucker (Gast)

>was mach ich dagegen?

Niederohmigen Pull-Up verwenden, so 1..5KOhm.

Ausserdem, wie soll dein uC Daten auf den UART senden, wenn er keinen 
Steuerbefehl per Parallel-Port bekommt? Hat das deine Software 
berücksichtigt?

MFG
Falk

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:
> Ausserdem, wie soll dein uC Daten auf den UART senden, wenn er keinen
> Steuerbefehl per Parallel-Port bekommt? Hat das deine Software
> berücksichtigt?

Dazu müsste man wissen, ob Elbegucker einen "Hardwareknopf" oder einen 
"Softwareknopf" meint...

Autor: Elbegucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
@ Falk Brunner
Nun das mit dem niederohmigen Pul-up hat schonmal funktioniert. Der
Mikrocontroller muß sich in dem Strobe-Interrupt aufgehängt haben.


Verwende ATMega32, EEPROM AT24C512B


Allerdings habe ich nun bei genauerem Hinsehen festgestellt, dass die 
Daten doch nicht korrekt ausgegeben werden.
Buchstabe werden verschluckt, andere doppelt geschrieben.

Dies kann ja mehrere Gründe haben:
1.) Es gibt Probleme mit dem Intterrupt
2.) Die richtigen Daten liegen noch nicht an, wenn bereits aufs EEPROM 
geschrieben wird.
(Was eigentlich nicht der Fall sein sollte, da der Interrupt erst 
ausgelöst werden soll, nachdem die richtigen Daten anliegen. So ist es 
jedenfalls für den Parallel Port beschrieben.)
3.) Es gibt an sich Probleme beim Schreibvorgang aufs EEPROM
3.) Uart-Probleme


Dies ist die Ausgabe-Routine für den Uart:

// on keypress (PC2) send the data saved in the EEPROM to the usart
// interface

  if (debounce(&PINC, PC2)){
    word_address = 0;
    first_word_address = 0;
    seconde_word_address = 0;
    i2c_start();
    i2c_device_address(Dev_AT24C512+I2C_WRITE);
// set device address and write mode
    i2c_write(first_word_address);
    i2c_write(seconde_word_address);
// word address = 0x00
    i2c_start();
    i2c_device_address(Dev_AT24C512+I2C_READ);
// set device address and read mode
    i2c_read_Ack();
// read one byte, send acknowledge for next byte

      while (TWDR != 0x17){
        send_to_usart(TWDR);
        i2c_read_Ack();
        word_address++;
      }
    i2c_read_Nack();
// read one byte, send no acknowledge
    i2c_stop();
// set stop condition = release bus
    first_word_address = (word_address >> 8);
    seconde_word_address = (word_address & 0xFF);
    send_start = 0;
  }  //if end


Nun habe ich mal folgendes ausprobiert:
Ich lasse die Daten nicht auf EEPROM schreiben, sondern gebe sie direkt 
auf dem Uart aus. Zunächst einmal es werden keine Buchstaben doppelt 
geschrieben oder verschluckt. Aber komischerweise wird mein Dokument 
entweder ganz oder nur teilweise über den Uart ausgeben.

Liegt es nun an der Uart-Schnittstelle? Weiß jemand Rat?

Auszug aus dem Quelltext:

ISR (INT2_vect){              // STROBE impulse
  PRINTER_PORT |= (1<<BUSY);  // set BUSY
  send_to_usart(DATA);
  PRINTER_PORT &= ~(1<<BUSY);
}  // ISR end



void send_to_usart(unsigned char data) {
  while (!(UCSRA & (1<<UDRE)));  // wait until sending is possible
                                // --> UART Data Register Empty  UDRE=1;
    UDR = data;
/* The Uart Data Register is empty, the previous assignment was 
completed. Writes the sign "data" on the interface.  */
}

Autor: Elbegucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
??

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.