usb->arduino->lpt ?

art100
Offline
Зарегистрирован: 09.03.2014

Какие варианты?

1.Делаем тестер на светодиодах.

Я накидал такого кода

// art100 to write test pin centronics Blink leads 2-12
void setup() {                
  for(int n=2; n<=12; n++){  pinMode(n, OUTPUT); }
}
void loop() {
  for(int n=2; n<=12; n++){
   digitalWrite(n, HIGH);   // turn the LED on (HIGH is the voltage level)
   delay(1000);               // wait for a second
   digitalWrite(n, LOW);    // turn the LED off by making the voltage LOW
   delay(100);               // wait for a second
  }
}
//================================================================

 

2.Убедились что ничего не отпалим. Попробуем что-нибудь такое.

// art100 copy other 20140907 code usb->arduino->lpt
const int startup_charsPerLine = 80;
const int startup_num_lines = 2;
byte startup_message[startup_num_lines][startup_charsPerLine] = {
  "This is the startup message. It prints whenever",
  "the Arduino is reset.",
};

const int charsPerLine = 80;   // this is the max # of chars per line
const int num_lines = 10;
byte message[num_lines][charsPerLine] = {
  "    ",   // blank line
  "This is the normal message. It prints whenever",
  "you connect pin 14 (analog 0) to GND.",
  "  ",  // blank line
  "------------------------------------------------------------------------------",   // a spiffy line
  "1) More message content",
  "  ",
  "II) you can have up to about 80 chars per line ",
  "  ",
  "------------------------------------------------------------------------------",
};
// parallel port  = arduino //Centronics Connector    
const int nStrobe =  2;//1	1	nStrobe	(input)
const int data_0  =  3;//2	2	Data pin 0	(input)
const int data_1  =  4;//3	3	Data pin 1	(input)
const int data_2  =  5;//4	4	Data pin 2	(input)
const int data_3  =  6;//5	5	Data pin 3	(input)
const int data_4  =  7;//6	6	Data pin 4	(input)
const int data_5  =  8;//7	7	Data pin 5	(input)
const int data_6  =  9;//8	8	Data pin 6	(input)
const int data_7  = 10;//9	9	Data pin 7	(input)
const int nAck    = 11;//10	10	nAck	(output)
const int busy    = 12;//11	11	busy	(output)
                       //18-25	19-30	Ground (-)
const int strobeWait = 2;   // microseconds to strobe for
//-------------------------------------------------------------------------------------------
void setup() {
  Serial.begin(9600);

  pinMode(nStrobe, OUTPUT); digitalWrite(nStrobe, HIGH);       // is active LOW    // set HIGH
  pinMode(data_0,  OUTPUT);
  pinMode(data_1,  OUTPUT);
  pinMode(data_2,  OUTPUT);
  pinMode(data_3,  OUTPUT);
  pinMode(data_4,  OUTPUT);
  pinMode(data_5,  OUTPUT);
  pinMode(data_6,  OUTPUT);
  pinMode(data_7,  OUTPUT);
  pinMode(nAck,     INPUT);     // is active LOW
  pinMode(busy,     INPUT);  
  pinMode(13,      OUTPUT);
  pinMode(14,       INPUT); digitalWrite(14, HIGH);  // analog pin 0 on duemilanove and uno
  
  delay(1000);
  resetPrinter();
  printStartupMessage();
  resetPrinter();
  
  Serial.println("Delay for 5 sec");
  delay(5000);
  
  Serial.println("Startup complete");
}
//====================================
void loop() {
 while(digitalRead(14) == HIGH) {
   // wait
 }
  resetPrinter();
  printMessage();
  resetPrinter();
}
//====================================
void printByte(byte inByte) {
  while(digitalRead(busy) == HIGH) {
    // wait for busy to go low
  }

  int b0 = bitRead(inByte, 0);
  int b1 = bitRead(inByte, 1);
  int b2 = bitRead(inByte, 2);
  int b3 = bitRead(inByte, 3);
  int b4 = bitRead(inByte, 4);
  int b5 = bitRead(inByte, 5);
  int b6 = bitRead(inByte, 6);
  int b7 = bitRead(inByte, 7);

  digitalWrite(data_0, b0);        // set data bit pins
  digitalWrite(data_1, b1);
  digitalWrite(data_2, b2);
  digitalWrite(data_3, b3);
  digitalWrite(data_4, b4);
  digitalWrite(data_5, b5);
  digitalWrite(data_6, b6);
  digitalWrite(data_7, b7);

  digitalWrite(nStrobe, LOW);       // strobe nStrobe to input data bits
  delayMicroseconds(strobeWait);
  digitalWrite(nStrobe, HIGH);

  while(digitalRead(busy) == HIGH) {
    // wait for busy line to go low
  } 
}
//-------------------------------------------------------------------------------------------
void resetPrinter() {
  Serial.println("Reseting printer...");
  printByte(27); // reset printer
  printByte('E');
  Serial.println("Printer Reset"); 
}
//-------------------------------------------------------------------------------------------
void printMessage() {
  digitalWrite(13, HIGH);
  for(int line = 0; line < num_lines; line++) {  
    for(int cursorPosition = 0; cursorPosition < charsPerLine; cursorPosition++) {
      byte character = message[line][cursorPosition];
      printByte(character);
      delay(1);
    }
    printByte(10); // new line
    printByte(13); // carriage return
  }
  digitalWrite(13,LOW);
}
//-------------------------------------------------------------------------------------------
void printStartupMessage() {
  Serial.println("Print start-up mssage");
  digitalWrite(13, HIGH);
  for(int line = 0; line < startup_num_lines; line++) {  
    for(int cursorPosition = 0; cursorPosition < startup_charsPerLine; cursorPosition++) {
      byte character = startup_message[line][cursorPosition];
      printByte(character);
      //      delay(1);
    }
    printByte(10); // new line
    printByte(13); // carriage return
    Serial.print("Line ");
    Serial.print(line);
    Serial.println(" printed.");
  }
  Serial.println("Startup message printed");
  digitalWrite(13,LOW);
}
//-------------------------------------------------------------------------------------------

Железо в порядке.

 

art100
Offline
Зарегистрирован: 09.03.2014

Какая должна быть программа чтобы от компьютера печатать? Варианты? Скажем HP LaserJet LPT. Я думаю что привязать драйвер допустим HPLaserJet к COM27 не составляет труда ни у кого. А дальше что зашивать в arduino?

Пните ногой куда дальше копать?

 

 

toc
Offline
Зарегистрирован: 09.02.2013

драйвер принтера, который предназначен для работы через LPT порт не может работать через COM порт+ардуина. Варианты:
1. изменить устройство так чтобы ОС его определяла как lpt порт.
2. разработать свой драйвер или просто программу для печати ("блокнот" умеющий работать с вашим устройством и подключённым принтером).

MikSer
Offline
Зарегистрирован: 27.01.2012

а не проще комовский термопринтер подключить? У меня классно он работает.

http://www.adafruit.com/product/597

art100
Offline
Зарегистрирован: 09.03.2014

Какое-то грустное решение. Все варианты сходятся к usb-atmega8-lpt  или другими словами Травить платку искать atmega8 кварц12МГц кандер резисторы пара диодов

Вариант с Кипарисом(cupres) который прошивку каждый раз подгружает перед работой ради скорости странный. Делал я на нем осцилограф и 3Dочки работали ну там скорости всегда мало.

Что-то у меня совсем нет желания кварц12 искать по рынкам. Плату паять и в итоге получить глюкалово юсбишное.

Arduino-ами тут совсем не пахнет. :(

 

 

 

art100
Offline
Зарегистрирован: 09.03.2014

MikSer пишет:
а не проще комовский термопринтер подключить? У меня классно он работает.

хохма в том что я захотел для технологии РисовалкаPCB->LPT->СвободныйЛазерныйПринтерОтХьюлетта->БумажкуЮтугомКГетинаксуПрижат->ХлорноеЖелезоВВанночке->Какую-нибудь чудо платку вытравить. ЛУТ

А в ардуинах в лучшем случае текст выгоняли.

А графика никак.

Я как старый админ всегда от таких переходников плевался.

Чувствую что надо что-нибудь в духе на PCI-E->CH382->DB25(Lin/Win) за 10-20 баксов к принтеру прикупить и успокоится.

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

art100 пишет:

хохма в том что я захотел для технологии РисовалкаPCB->LPT->СвободныйЛазерныйПринтерОтХьюлетта->БумажкуЮтугомКГетинаксуПрижат->ХлорноеЖелезоВВанночке->Какую-нибудь чудо платку вытравить. ЛУТ

А в ардуинах в лучшем случае текст выгоняли.

там где ты скеч спионерил, у них все работает. мотай ниже, там они этот скеч ускорили еще

art100
Offline
Зарегистрирован: 09.03.2014

Puhlyaviy пишет:

art100 пишет:

хохма в том что я захотел для технологии РисовалкаPCB->LPT->СвободныйЛазерныйПринтерОтХьюлетта->БумажкуЮтугомКГетинаксуПрижат->ХлорноеЖелезоВВанночке->Какую-нибудь чудо платку вытравить. ЛУТ

А в ардуинах в лучшем случае текст выгоняли.

там где ты скеч спионерил, у них все работает. мотай ниже, там они этот скеч ускорили еще

не видел

я на arduino.cc что-то выковырял какой-то труп без графики

дай если видел

Только что победил связку Windows7(32бита)->rs232->ПолКилоЖелезаИзПринтераВыкинулНаДурныеДаташитыMAXIM232поплевалсяПоплевалсяcHPдибильныхДебильныхСайтовНалистался->rs232->HPLaserJet4P

Короче Косяки не только в том что на DTR сигналы уже можно забить, но и XON/XOFF у ХьюлеттовПаккардов не гарантирется на стандартных вындо 9600. Вот у меня 57600 работает и все остальные скорости вот такой прикол нет. Можетлюминисцентная лампа так влияла? Еще короче. Не верю ничему. Все сам проверяю. Еще короче фото.

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Чего дать то, ты ту тему на arduino.cc дальше прочитай.

art100
Offline
Зарегистрирован: 09.03.2014

Puhlyaviy пишет:
Чего дать то, ты ту тему на arduino.cc дальше прочитай.

щас поищу ссылку там вроде две с кодом были

art100
Offline
Зарегистрирован: 09.03.2014

код от куда брал не нашел

Чувствую что в этой цепочке Win7->HP древний прокалдывай не прокладывай arduino ни чего надежного или быстрого не получить. Ключевые слова

arduino

LPT

Надежно

или Быстро

не получить