मूल रूप से क्या वह चाहता है एक linux बॉक्स के उत्पादन के आंकड़ों के है, तो पर इसे भेजने के max232 आईसी के एक समूह के साथ एक 2 तार बस मान लीजिए -> UART या सॉफ्टवेयर RS232 कार्यान्वयन के साथ कुछ माइक्रोकंट्रोलर
जब तक अधिकतम 232 के अधिकतम आउटपुट (टीटीएल) लोड तक, व्यक्तिगत माइक्रोकंट्रोलर (उसी पीसीबी पर, उदाहरण के लिए, अलग-अलग इमारतों की बजाय) के बीच कोई वोल्टेज क्षमता समस्या नहीं होती है, तब तक कोई व्यक्ति अधिकतम अधिकतम 3232 कनवर्टर को दूर कर सकता है; (या क्लोन, या एक प्रतिरोधी और उलटा/ट्रांजिस्टर) आईसी।
मार्क या स्पेस समता के लिए लिनक्स टर्मियोस सेटिंग्स नहीं ढूंढ सकता (जो मुझे यकीन है कि हार्डवेयर यूआरटी वास्तव में समर्थन करता है, सिर्फ लिनक्स टीटी कार्यान्वयन नहीं), इसलिए हम वास्तविक समानता पीढ़ी को थोड़ा सा हैकर कर देंगे।
8 डेटा बिट्स, 2 स्टॉप बिट्स 8 डेटाबेस, 1 समानता बिट, 1 स्टॉप बिट के समान लंबाई है। (जहां पहली रोकथाम एक तर्क 1, ऋणात्मक रेखा वोल्टेज है)।
कोई 9वीं बिट को एक संकेतक के रूप में उपयोग करेगा कि अन्य 8 बिट्स व्यक्ति या माइक्रोकंट्रोलर के समूह का पता हैं, जो तब अगली बाइट्स को किसी प्रकार के कमांड या डेटा के रूप में लेते हैं, साथ ही, वे हैं 'संबोधित'।
यह 8 बिट ट्रांसपरेंट प्रदान करता है, हालांकि एक तरफ यातायात का मतलब है, 'बहुत सारी चीजें' (256 अलग-अलग चीजों), वास्तव में;) को उसी बस पर संबोधित करना है।यह एक तरीका है, क्योंकि जब कोई 2 रास्ता करना चाहता है, तो आपको 2 तार जोड़े की आवश्यकता होगी, या एकाधिक आवृत्तियों पर संशोधित करना होगा, या उसमें कॉलिशन डिटेक्शन और उसके बहुत सारे कार्यान्वयन को लागू करना होगा।
पीआईसी माइक्रोकंट्रोलर्स ehm के साथ 'कुछ प्रवंचना' 9 बिट धारावाहिक संचार कर सकते हैं (9 बिट एक और रजिस्टर में वास्तव में है;) अब
... तथ्य यह है कि लिनक्स और पसंद पर ऐसा नहीं है पर विचार - कि- सरल ...
क्या आपने बस 'पता शब्द' (जिसकी आपको 9 बिट्स की आवश्यकता है) के लिए समानता को बदलना माना है और फिर या तो इसे अजीब या यहां तक कि सेट करने के लिए, इसे गणना करने के लिए सही है एक को 9वीं (समानता) बिट '1' को समानता और 8 बिट 'डेटा' के साथ चुना जाता है, फिर समानता को वापस बंद कर दें और 2 स्टॉप बिट्स चालू करें। (जो अभी तक आपके माइक्रोकंट्रोलर के संबंध में 9 बिट शब्द की लंबाई रखता है;) ... यह बहुत समय पहले है, लेकिन जहां तक मुझे याद है कि स्टॉप बिट्स तब तक होते हैं जब तक चीजों के समय में डेटा बिट्स होता है।
यह किसी भी चीज पर काम करना चाहिए जो समानता के साथ 8 बिट आउटपुट, और 2 स्टॉप बिट्स के साथ कर सकता है। जिसमें पीसी हार्डवेयर और लिनक्स शामिल हैं। (और डॉस आदि)
पीसी हार्डवेयर भी विकल्प हैं बस चालू या बंद सभी शब्दों के लिए 'समता' चालू करने के लिए अगर मैं सही ढंग से याद करते हैं से (वास्तव में यह की गणना के बिना) 'पीठ में दिन का
इसके अलावा, 9 वें बिट तस्वीर डेटाशीट के बारे में बोलता है, वास्तव में आरएस -223 विनिर्देशों के समान समानता है। बस आप इसे बंद या चालू करने के लिए स्वतंत्र हैं। (पीआईसी के वैसे भी - लिनक्स में यह उससे थोड़ा अधिक जटिल है)
(लिनक्स पर कुछ टर्मियो सेटिंग्स कुछ भी हल नहीं करेंगे मुझे लगता है ... बस इसे चालू और बंद करें ... हमने बनाया है वह सामान चीज चीजें करते हैं;)
एक तस्वीर माइक्रोकंट्रोलर वास्तव में वही करता है, बस यह डेटाशीट में 'वास्तव में क्या है' जैसा प्रस्तुत नहीं किया जाता है। वे वास्तव में इसे '9वीं बिट' और इस तरह की चीजें कहते हैं। पीसी पर और इसलिए लिनक्स पर यह वही तरीके से काम करता है।
वैसे भी अगर इस चीज़ को 'दोनों तरीकों' पर काम करना चाहिए तो शुभकामनाएं इसे दो जोड़ों के साथ तारों से जोड़ना या टक्कर का पता लगाने के लिए कुछ रास्ता तय करना, जो कि 9 बिट्स प्राप्त करने से कहीं अधिक समस्याग्रस्त है।
किसी भी तरह से यह एक अतिरंजित शिफ्ट रजिस्टर से कहीं अधिक नहीं है। अगर पीसी पर यूआरटी ऐसा नहीं करना चाहता (जो मुझे संदेह है), बस डेटा को हाथ से बाहर करने के लिए डीटीआर पिन का दुरुपयोग करें, या प्रिंटर पोर्ट को ऐसा करने के लिए दुरुपयोग करें, या एक शिफ्ट रजिस्टर को हुक करें प्रिंटर बंदरगाह ... लेकिन समानता चाल के साथ इसे वैसे भी ठीक काम करना चाहिए।
#include<termios.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdint.h>
#include<string.h>
#include<stdlib.h>
struct termios com1pr;
int com1fd;
void bit9oneven(int fd){
cfmakeraw(&com1pr);
com1pr.c_iflag=IGNPAR;
com1pr.c_cflag=CS8|CREAD|CLOCAL|PARENB;
cfsetispeed(&com1pr,B300);
cfsetospeed(&com1pr,B300);
tcsetattr(fd,TCSANOW,&com1pr);
};//bit9even
void bit9onodd(int fd){
cfmakeraw(&com1pr);
com1pr.c_iflag=IGNPAR;
com1pr.c_cflag=CS8|CREAD|CLOCAL|PARENB|PARODD;
cfsetispeed(&com1pr,B300);
cfsetospeed(&com1pr,B300);
tcsetattr(fd,TCSANOW,&com1pr);
};//bit9odd
void bit9off(int fd){
cfmakeraw(&com1pr);
com1pr.c_iflag=IGNPAR;
com1pr.c_cflag=CS8|CREAD|CLOCAL|CSTOPB;
cfsetispeed(&com1pr,B300);
cfsetospeed(&com1pr,B300);
tcsetattr(fd,TCSANOW,&com1pr);
};//bit9off
void initrs232(){
com1fd=open("/dev/ttyUSB0",O_RDWR|O_SYNC|O_NOCTTY);
if(com1fd>=0){
tcflush(com1fd,TCIOFLUSH);
}else{printf("FAILED TO INITIALIZE\n");exit(1);};
};//initrs232
void sendaddress(unsigned char x){
unsigned char n;
unsigned char t=0;
for(n=0;n<8;n++)if(x&2^n)t++;
if(t&1)bit9oneven(com1fd);
if(!(t&1))bit9onodd(com1fd);
write(com1fd,&x,1);
};
void main(){
unsigned char datatosend=0x00; //bogus data byte to send
initrs232();
while(1){
bit9oneven(com1fd);
while(1)write(com1fd,&datatosend,1);
//sendaddress(223); // address microcontroller at address 223;
//write(com1fd,&datatosend,1); // send an a
//sendaddress(128); // address microcontroller at address 128;
//write(com1fd,&datatosend,1); //send an a
}
//close(com1fd);
};
कुछ हद तक काम करता है .. हो सकता है कि कुछ चीजें गलत तरीके से हों लेकिन यह 9 बिट्स भेजती है। (सीएसटीओपीबी 2 स्टॉपबिट सेट करता है, जिसका अर्थ यह है कि 8 बिट ट्रांसपरेंट डेटा पर 9वी बिट = 1, मोडिंग मोड में 9वी बिट = 0;)
यह भी ध्यान रखें कि वास्तविक आरएस 232 लाइन वोल्टेज स्तर दूसरे तरीके से हैं आपका सॉफ़्टवेयर 'पढ़ता है' (जो कि 'उलटा' 5v ttl स्तर जैसा है, आपका चित्र माइक्रोक्रोनरोलर ट्रांजिस्टर या इन्वर्टर या अधिकतम 232 क्लोन आईसी से मिलता है)। (-19 वी या -10 वी (पीसी) तर्क 1 के लिए, + 1 9/+ 10 तर्क के लिए 0), रोकें बिट्स नकारात्मक वोल्टेज हैं, जैसे 1, और एक ही लंबाई।
बिट्स बाहर जाने के 0-7 (और इस मामले में: 8;) ... इसलिए शुरू बिट -> 0, 1,2,3,4,5,6,7,
यह एक सा हैकी लेकिन यह दायरे पर काम करता प्रतीत होता है।
क्या आप सुनिश्चित हैं कि 9वीं बिट सिर्फ समानता नहीं है? मैंने केवल 7 या 8 डेटा बिट्स + वैकल्पिक समानता बिट + 1, 1.5 या 2 स्टॉप बिट्स को देखा है। –
@ पॉल आर -9 बिट सेटिंग्स असामान्य हैं, लेकिन (कम से कम उपयोग किया जाता है) समर्थित है। http://en.wikipedia.org/wiki/Serial_port#Data_bits –
क्या आप उन लोगों को शामिल कर सकते हैं जो संभवतः उत्सुक हैं कि आपके पास 9 बिट सेटिंग चाहिए जो आपके पास है? –