Gerçek 9-bit seri port verileri?


10

Pi'ye taşımak istediğim Atmel UTC'de çalışan mevcut, yarı tamamlanmış bir otomat projem var.

Bozuk para alıcısı gibi çevre birimleriyle konuşmak için, 9 veri bitlik seri port arabirimine (artı başlatma, durdurma ve eşlik bitleri) sahip Çoklu Bırakma Veriyolunu desteklemesi gerekir .

9. veri biti kötü zamanlama sorunlarına neden olabileceğinden, tespit edilmesi ve düzeltilmesi zor olduğu için parite bitini kullanmaya dayanan, ağda önerilen buluntuların korsan olduğu Atmel tahta ile zor yolu öğrendim. beni bakın bu veya benzer. Teşekkür).

Herkes Pi için gerçek bir 9 bit seri port (eğer bir şekilde Pi sıfır ile çalışabilir eğer bonus puan) satın alabilirsiniz / nerede biliyor mu.

Belki de bir Şapka var mı? Ya da kolayca (ben / w adam, h / w az bilgi ile) 9 veri biti UART işlemek ve bir Pi kontrol etmek için başka bir tahta kullanabilirsiniz?


1
GPIO'da - Raspbian vb.Görüntülerde Pi'den çıktı sağlamak için ayarlanmış bir seri arayüz var, bu yüzden önce bunu devre dışı bırakmanız gerekiyor, ancak yine de bitlerle ilgili standart aralıkta olmayan bir sorununuz var. Forumlardaki bu yazı da yardımcı olabilir.
Wilf

1
Projeye donanım ekleyebilir misiniz? UART'lı bir kalkan, bunlardan birini yapmak için çok zor olmaz ve tam olarak ihtiyacınız olanı verir, ancak değerinden daha fazla G / Ç tüketebilir. Gerçekten düşük uçlu bir PIC CPU, çok fazla maliyet veya sizin için aşırı miktarda çalışma olmadan 8 ila 9 bit seriyi çevirmek için hızlı bir şekilde programlanabilir.
Michael Kohne

Nereden bir tane alabileceğimi biliyor musun?
Mawg, Monica'yı

Yanıtlar:


7

Benim pigpio kütüphanem 9-bit seri veri okumayı ve yazmayı destekler. Mevcut herhangi bir GPIO'yu kullanabilmeniz için bit vuruşu kullanır.

Doğru hatırlıyorsam, 19.2 kbps veya daha düşük hızlar oldukça kararlıydı.

Saniyede hangi bitlere ihtiyacınız var?

Okuma ( C , Python ) yazmaktan ( C , Python ) biraz daha kolaydır .


1
100 * emin misin? Gelişmeye ilk başladığımda, bu tür "hack'lerden" uyarıldım ve zamanlama problemleri olacağını söyledim. Birinin bir otomatla denediğini biliyor musunuz? en.wikipedia.org/wiki/Multidrop_bus ve coin-acceptor.com.cn/Upload/EditorFiles/technicalfile/... (ben bir şirket güvenlik duvarı arkasında olduğum gibi üzgünüm, ben bir sectoin numarasını veremem)
Mawg yeniden aktifleştirme Monica diyor

3
Sahip olduğum tek deneyim, Pi ve USB seri dongle'lı bir dizüstü bilgisayar arasındaki kütüphaneyi kullanmak. Yaptığım testler raspberrypi.stackexchange.com/questions/27488/… ' de belgelenmiştir . Yazılımım yalnızca RX / TX ve toprak kullanır, bu nedenle diğer seri sinyallerle süslü bir şey yaparsanız sorun yaşayabilirsiniz.
joan

Kulağa iyi geliyor. : Spesifikasyonu kontrol edeyim ve size geri
döneyim

2
@Mawg: Bunu kabul ettin. Önerilen çözümün güvenilir şekilde çalıştığı anlamına mı geliyor?
Thomas Weller

3

Ödeme için MDB protokolünü kullanan bir atıştırmalık otomatı çalıştırmak için bir projeye atandım ve projeyi Pi Zero (Orange) kullanarak tamamladım.

9 bit donanım seri ve yazılım seri kütüphanelerini denedim ve Pi Zero'da zamanlama sorunları yaşadım. MDB'nin 9 bit seri iletişimi bir acı haline geldi. MDB protokolü, çevre birimlerinin seri iletişim zamanlaması için% 5 toleransa sahip olması gerektiğini, ancak farklı çevre satıcılarının MDB protokolüne uygun olmayan farklı toleranslara sahip olduğunu söylüyor. Seri iletişimi tamamladığınızı ancak farklı bir satıcının ödeme çevre birimini denediğinizi düşünüyorsanız, işe yaramaz. Bu yüzden MDB protokolü veri sayfasına güvenmeyin. Buggy satıcıları için MDB denetleyicisi uygulamaktan bıktım ve bıktım. Ayrıca, bazı çevre birimleri dahili önyükleme işlemleri sırasında uart pinlerinden aşırı akım miktarlarını boşaltabilir ve seri iletişim katmanınıza zarar verebilir. Yani, bir soyutlama kullansan iyi olur. Optokuplörler iyi ama yine de yapmam t Pi Zero kullanarak MDB seri iletişimini kullanmanızı öneririz. Daha iyi bir yol, bir AVR kullanarak orta katman yaklaşımı kullanmaktır.

Daha ziyade MDB iletişimi için Pi Zero'da Uart kullanarak MDB kullanımı, yoklama vb. İçin bir Atmega328 AVR kullandım. Atmega328, Yazılım Seri kütüphanesi kullanarak MDB çevre birimlerini kontrol eder ve donanım seri üzerinde Pi Zero'ya insan tarafından okunabilir veriler gönderir. Tüm elektronik şema, kaynaklar ve Pi Zero Armbian imajı, Otomat işlemleri için Python kodu burada mevcuttur:

http://eliverse.com/content/vendiverse/

Motorların kontrolü, ürün teslimat sensörleri, soğutucular ve karakter LCD ekranlar hakkında daha fazla bilgi için wiki sayfasını kontrol edebilirsiniz. Tam bir satış makinesi kontrolörü projesidir ve birkaç satış makinesi üreticisi tarafından kullanılmaktadır.


Bu harika bir cevap, özellikle de ilk cevap olduğu için. Daha önce gerçek bir 9-bit UART ile bir Atmel anakartla başarılı oldum ve bir Raspberry Pi kullanarak para biriktirmeyi umuyordum, ancak çözümünüz o kadar kapsamlı ki onu kullanmamak için bir aptal olacağım. Ne yazık ki, ben sadece bir yazılım adamım, bu yüzden bir prototip için şiddetle lehim gerektirmeyen bir çözümü tercih ederim. COTS kartı tavsiye edebilir misiniz?
Mawg, Monica'yı

Web sitenizin bu sayfası "Vendiverse VMC Kartı Oluşturma adımlarını tamamladıysanız veya bir Vendiverse VMC kartı aldıysanız" diyor. Senden bir tane alabilir miyim? Maliyeti ne kadardır? Ayrıca, belirli bir MDB çevre birimini önerirseniz, bunu sitenize ekleyebilir misiniz? Teşekkürler
Mawg, Monica'yı

Görünüşe göre e-postalarım spam mesajınıza takılıyor. Benimle iletişime geçebilir misin? E-posta adresim var ve ben hala Bremen'deyim
Mawg, Monica'yı yeniden görevlendirdiğini söylüyor

Şimdi sayfanın öldüğü
anlaşılıyor


1

Tüm seri veriler tanımı gereği 1 bittir. Verileri anlamlı verilere ve anlamlı verilerden nasıl yorumladıkları konusunda nasıl anlaşılacağı bu verileri okuyan ve yazılan arayüzlere bağlıdır .
9 bit veri ve eşlik biti ve bir durdurma ve bir başlangıç ​​biti istiyorsanız. Sonra verilerinizi bu formata dönüştürmek ve o formatta okuduğunuz verileri yorumlamak size kalmıştır. Başka bir cevapta belirtilen pigpio modülü size ihtiyacınız olan donanım arayüzünü verecek veya kendiniz yazabilirsiniz. Python'da gelişiyorsanız, Scott Griffiths tarafından bitString.py modülüne, bit tabanlı verileri işlemeyi oldukça kolaylaştıran bir kütüphane olarak bakmanızı öneririm.


5
Seri veri iletimi ile ilgili problem zamanlamadadır. Veriler kendi kendine saat tutma özelliğine sahip değildir ve garantili tek seviye geçişi durdur / başlat bitlerinde bulunur. Her iki uç da bitlerin nerede olduğunu bulmak için sıkı ve kesintisiz zamanlamayı sürdürmelidir. Bu nedenle, genellikle verileri iletmek ve almak için özel donanım kullanılır. Çok az zamanlama mesafesi var.
joan

1

Kesinlikle donanım UART'ı pigpio gibi yazılım uygulamasına tercih ederim.

9 bit iletişim için eşlik bitini kullanabilirsiniz. Küçük bir sorun var: mevcut çekirdeğin CMSPAR desteği yok (boşluk / işaret paritesi).
Ancak geçerli çekirdeğe rağmen istenen 9. bit değerini elde etmek için çift / tek pariteyi değiştirebilirsiniz, örnek:

unsigned char check_parity(unsigned char v)
{
    v ^= v >> 4;
    v &= 0xf;
    return (0x6996 >> ((v ^ (v >> 4)) & 0xf)) & 1;
}

/* send 9 bits - 8 bits of byte + 1 bit of parity */
send_byte_with_parity(unsigned char byte, unsigned char parity)
{
    if (check_parity(byte) == parity) {
        options.c_cflag &= ~PARODD;
    } else {
        options.c_cflag |= PARODD;
    }
    tcsetattr(fd, 0, &options);
    write(fd, &byte, 1);
}


Daha iyi yaklaşım IMHO, CMSPAR desteği için küçük çekirdek düzeltme eki kullanmaktır:
http://marc.info/?l=linux-serial&m=145706834101241&w=2
Kodun biraz daha basit olmasını sağlayan işaret / boşluk eşlik desteği ekler.

PS Bu yaklaşımla seri üzerinden MDB uyguladım. Pi üzerinde kusursuz çalışır.
PPS Yaması onaylandı ve CMSPAR 4.6 çekirdekten başlayarak kutudan çıkacak.


Yama ya da en azından bir bağlantı ve daha eksiksiz detaylar olmadan, bu bir cevap değil, hatta yararlı bir yorum da değildir - teorik olarak mümkün olduğunu söylediğinden başka.
Steve Robillard

Hala cevaplardan daha fazla soru bırakıyor: MDB'yi nasıl uygularım, çekirdek yamasını nasıl uygularım, bu tüm Pi'lerde mi yoksa sadece bazılarında mı çalışır? Bu başka ne olabilir ki? Gerekirse bunu nasıl geri alabilirim? Bu yama güvenli mi? Bunu bildiğinizi unutmayın, çünkü OP uygulanmamıştır.
Steve Robillard

1
Cevabınızı geri aldım, cevabınızın daha iyi olabileceğini itiraf ettiğiniz için. Umarım onu ​​geliştirme fırsatını yakalarsınız.
Steve Robillard

Başka ne eklemem gerekiyor? MDB uygulaması? İşverenimden açık kaynak kodlama izni alamadım.
edo1

Önceki yorumuma bakın ve son kullanıcının yaptığınız her şeyi bilmediğini unutmayın.
Steve Robillard

1

Yapamazsınız GÜVENİLİR 9 bitlik biçimi ve sıkı MDB zamanlamaları nedeniyle MDB yoluna direkt bağlantı RPI seri. MDB çevre birimi ve RPi arasındaki iletilerin anında ve gerçek zamanlı olarak dönüştürülmesi gerekir. Yardımcı olacak bu bağlantıyı kontrol edin: DIY MDB-UART dönüştürücü


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.