mikrocontroller.net

Forum: Compiler & IDEs Probleme PS2-Protokoll <-> µC


Autor: Robert P. (Firma: ---) (ausmilkel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche derzeit eine PS2-Maus mit einem AT90CAN auszulesen. Ich 
habe derzeit einen externen clk mit 12MHz am µC.
Nachfolgend habe ich mal einen Teil meines Programmcodes reingestellt. 
Der Code hat noch kein Parity-Bit und was danach folgt als Inhalt.
[...]

#define sbit(sPort,sPin) sPort |= (1 << sPin)  // setzt den Pin x bei Port x
#define cbit(cPort,cPin)  cPort &= ~(1 << cPin)  // löscht den Pin x bei Port x
#define RESET   0xFF    //  1111 1111
#define SW_clk  PE4
#define SW_SD  PE5

[...]

void sende_befehl(void)
{
  char send_cnt=0;
  int  loop=0;

  clk_low;                      // Clk auf Low
  
  for(loop=0;loop < 3; loop++)  // ... für ca.100µs warten
      {NOP;}
        data_low;               // DAtenleitung auf Low
  
  for(loop=0;loop < 3; loop++)  // ... für ca.100µs warten
      {NOP;}
  
  clk_high;      // Clk wieder auf High 
  
  for(send_cnt=0;send_cnt < 8; send_cnt++) // Daten raussenden
    {
      while(PINE & (1<<SW_clk)) // warten solange Maus_clk noch nicht auf Low ist

        
      if(RESET & (1 << send_cnt))  // Wenn Bitstelle von Befehl "RESET" eine 1 ist  
         {            
           sbit(SW_PORT,SW_SD);  // ... dann Datenleitung auf 1
         }
      else
         {         
           cbit(SW_PORT,SW_SD);  // ... ansonsten Datenleitung auf 0
         }
       
      while(!PINE & (1<<SW_clk)) // Warten solange Maus_clk noch Low ist
        
      }
} 

 Mit dem versuche ich einen Befehl an die Maus zu senden. Die Maus 
sendet ihren clk mit einer Frequenz von ca. 13 kHz.
Ich habe mir die Übertragung mal am Pin mit dem Gerät DigiView 
angeschaut. Nach Zuschalten der Betriebsspannung hab ich gleich meine 
Übertragungsports initialisiert, also clk und data auf high. danach 
sendet die Maus AAh. soweit alles ok.

Nun zu meinem eigentlichen Problem:

Sobald ich die Routine ausführe kommt folgendes Phänomen. Nach der 
Startbedingung ( clk low, data low, clk high) sendet die Maus ihren clk. 
Mein Controller sendet jedoch erst beim zweiten Low level des Maus_clk 
eine 1, obwohl es schon beim 1. Low_level des Maus_clk gesendet werden 
müsste.

Sind denn die 12Mhz zur Abarbeitung meines for-, while-, if- codes in 
miener Routine zu langsam??? Hat jemand Erfahrung damit oder einen 
Verbesserungsvorschlag?

Gruß
Robert

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

      while(PINE & (1<<SW_clk)) // warten solange Maus_clk noch nicht auf Low ist

  // ...      
       
      while(!PINE & (1<<SW_clk)) // Warten solange Maus_clk noch Low ist
        

Da fehlen IMHO ; oder {} bei den while!

Autor: Robert P. (Firma: ---) (ausmilkel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unabhängig von den Klammern klappt es trotzdem nicht.

im Forum stehen ein paar Beispiele und alle freuen sich dass es klappt. 
könnte mir bitte jemand sagen mit welchen Frequenzen gearbeitet wird?

Gruß
Robert

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.