tvout e tastiera ps2

Salve ragazzi sto sviluppando un progetto che include la libreria tvout e keyboardps2 per una tastiera, ho scritto del codice che dovrebbe mostrare sullo schermo della tv ciò che si scrive dalla tastiera, quando collego il tutto però sul video non mi mostra quello che scrivo potete controllare se il codice che ho scritto è corretto ?

#include <TVout.h>

#include <fontALL.h>
#include <PS2Keyboard.h>

const int DataPin = 4;
const int IRQpin =  3;

int c = 0;

PS2Keyboard keyboard;
TVout TV;


void setup()  {
   TV.begin(PAL,150,96);
   TV.select_font(font4x6);
   keyboard.begin(DataPin, IRQpin);
   
   


}

void loop() {
    
    TV.clear_screen();
    
    
    char c = keyboard.read();    
    
    
   
    TV.print_char(0,0,c);
    
    delay(2000);
    
    
    

}

TV.begin(PAL,150,96);

Non mi pare tu possa usare quella risoluzione, è troppo alta per la memoria dell’Atmega.
Metti 128 come massimo.

ho modificato la risoluzione ma il problema resta ugalmente

Giacomo96: quando collego il tutto però sul video non mi mostra quello che scrivo

Cioè? Salta delle lettere? Non legge qualche tasto? Scrive cose strane?

Tempo fa io ho fatto la stessa cosa però mi pare di aver usato 2 micro differenti perché se non ricordo male la funzione di lettura dalla tastiera usa gli interrupt, così come TvOut. E TvOut ha bisogno che gli interrupt non siano toccati dato che la generazione del segnale video richiede dei tempi assolutamente perfetti altrimenti l'immagine generata non viene riconosciuta come valida dal televisore.

Quando premo qualsiasi pulsante dalla tastiera sullo schermo non mostra nulla. Quindi non posso farlo con un solo atmega ?

Non mi ricordo come feci io. Se vai nel vecchio forum c'è una lunga discussione diverse pagine sull'uso dell'Atmega per generare il segnale video, lì dovresti trovare un bel po' di info.

potresti darmi un link che non riesco a trovarlo ? grazie

http://arduino.cc/forum/index.php/topic,36583.0.html

Ho ritrovato 2 sketch, quindi dovrebbero essere 2 chip:

Questo dovrebbe andare nel chip collegato alla TV

#include <TVout.h>
#include <pollserial.h>
#include <fontALL.h>

TVout TV;
pollserial pserial;

void setup()  {
  TV.begin(_PAL,120,96);
  TV.select_font(font6x8);
  TV.println("Terminale seriale");
  TV.println("-- Versione 0.1 --");
  TV.set_hbi_hook(pserial.begin(9600));
}

void loop() {
  if (pserial.available()) {
    TV.print((char)pserial.read());
  }
}

Questo invece nel chip collegato alla tastiera.

/*  PS2Keyboard library example
  
  PS2Keyboard now requries both pins specified for begin()

  keyboard.begin(data_pin, irq_pin);
  
  Valid irq pins:
     Arduino:      2, 3
     Arduino Mega: 2, 3, 18, 19, 20, 21
     Teensy 1.0:   0, 1, 2, 3, 4, 6, 7, 16
     Teensy 2.0:   5, 6, 7, 8
     Teensy++ 1.0: 0, 1, 2, 3, 18, 19, 36, 37
     Teensy++ 2.0: 0, 1, 2, 3, 18, 19, 36, 37
     Sanguino:     2, 10, 11
  
  for more information you can read the original wiki in arduino.cc
  at http://www.arduino.cc/playground/Main/PS2Keyboard
  or http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html
  
  Like the Original library and example this is under LGPL license.
  
  Modified by Cuninganreset@gmail.com on 2010-03-22
  Modified by Paul Stoffregen <paul@pjrc.com> June 2010
*/
   
#include <PS2Keyboard.h>

const int DataPin = 2;
const int IRQpin =  3;

PS2Keyboard keyboard;

void setup() {
  delay(2000);
  keyboard.begin(DataPin, IRQpin);
  Serial.begin(9600);
}

void loop() {
  if (keyboard.available()) {
    
    // read the next key
    char c = keyboard.read();
    
    // check for some of the special keys
    if (c == PS2_ENTER) {
      Serial.println();
    } else if (c == PS2_TAB) {
      Serial.print("[Tab]");
    } else if (c == PS2_ESC) {
      Serial.print("[ESC]");
    } else if (c == PS2_PAGEDOWN) {
      Serial.print("[PgDn]");
    } else if (c == PS2_PAGEUP) {
      Serial.print("[PgUp]");
    } else if (c == PS2_LEFTARROW) {
      Serial.print("[Left]");
    } else if (c == PS2_RIGHTARROW) {
      Serial.print("[Right]");
    } else if (c == PS2_UPARROW) {
      Serial.print("[Up]");
    } else if (c == PS2_DOWNARROW) {
      Serial.print("[Down]");
    } else if (c == PS2_DELETE) {
      Serial.print("[Del]");
    } else {
      
      // otherwise, just print all normal characters
      Serial.print(c);
    }
  }
}

I 2 chip dovresti collegarli insieme via seriale. Però non mi ricordo altri dettagli. Guarda in quel thread se trovi altre info.

ok grazie mille, ora riguardo un po' tutto

per fare del testo a colori ad esempio, non lo posso fare con un solo atmega vero ? per farlo se ne potrebbero usare due o tre collegati insieme ?

Puoi fare tutto a colori con un Atmega. Come ti ho detto, la sua potenza è sufficiente per gestire piccole risoluzioni con buffer a 4 bit. Il problema è che devi scriverti il codice tu... e NON E' PER NIENTE FACILE. Devi sapere come creare il color burst in PAL mentre contemporaneamente generi il segnale video. Roba da fare tutto in assembly, non puoi lavorare in C: ti servono tempi perfetti.

Se guardi uno dei tanti progetti che sono online capirai le potenzialità di un Atmega328 ma anche le difficoltà che la cosa richiede. Parti ad esempio da AVGA, uno dei più "semplici": http://avga.prometheus4.com/

Dopo aver letto molta roba ho quasi capito come fare per vedere sulla tv ciò che scrivo da tastiera usando due atmega, questo schema va bene ? http://www.flickr.com/photos/pixelfrenzy/3774232393/ Basta caricare uno sketch sul primo arduino e uno sul secondo ?

Ma il Tellymate è diverso dal TvOut. Il Tellymate usa una libreria sua. Inoltre il Tellymate va flashato su un intero chip con il suo firmware, l'operazione devi condurla con l'Arduino come programmatore ISP su un altro chip.

Quindi come posso fare per connettere i due atmega via seriale e far fare ad uno input da tastiera e ad un altro l'output sul video ?

Per connetterli via seriale basta collegare il 3° piedino del 1° Atmega con il 2° piedino del 2° Atmega ed il 2° piedino del 1° Atmega con il 3° piedino del 2° Atmega (parlo di "piedini" fisici, non di pin logici). L'Atmega Tellymate lo usi come output video, l'altro ci carichi la lib per leggere la tastiera PS/2 e spedisci poi il tasto letto all'Atmega Tellymate.

Sarebbero tx e rx o sbaglio ?

Sono loro.

dove aver caricato i due diversi scketch sui due atmega in standalone, sembra funzionare il tutto ma quando digito qualcosa da tastiera compaiono dei carratteri illegibili o spesso non corrispondenti al testo premuto, non riesco a capire dove è il problema. potreste darmi una mano ?

Può dipendere forse dalla velocità di trasmissione o forse anche da come trasmetti e ricevi i dati. Cmq anch'io avevo avuto dei problemi, non so da cosa poteva dipendere. Poi non ho continuato ad indagare perché ho lasciato cadere la cosa.