Serial newbie: neden kabloları bağlayamıyorum?


14

Hiçbir şey anlamadan bir USB seri dönüştürücü üzerinden Arduino-esque kodu kullanarak bir PC'ye bir ATtiny85 iletmeye çalışıyorum. Şok oldum ve işe yaramadığı için dehşete düştüm.

Miniklerin pimlerinden birindeki voltajı titrediğini doğruladım, ancak USB pini kabloya iletmek veya almak için bir pimi bağladığımda ve bir terminal programı kullanarak dinlemeye çalıştığımda hiçbir şey almıyorum.

Hangi parçanın kırıldığını nasıl söyleyeceğimi bilmiyorum.

Seri iletmek için VCC, GND ve TXD'den daha fazlasına ihtiyacım var mı?


Detaylar:

Minik kod Arduino ortamında yazılmıştır ve benzer kod en azından LED'lere göre 4 "PORTB" piminin tümünü başarıyla yanıp söner. Kullandığım HLT ve Saporetti kodu bana programlamak için C ++ Arduino lehçesini kullanmasına izin. Program hala bir K altında geliyor.

#include <SoftwareSerial.h>

SoftwareSerial s(0,1); //receive on "0", and transmit on "1" aka "PB1" aka pin 6

void setup() { s.begin(4800); } // assuming 1Mhz, 4800 baud
void loop() { s.println(millis()); } // transmit something at every opportunity

Çok fazla çeviri var, ancak kod oldukça basit. Baud hızını ayarlayan kodun 1MHz olduğu varsayılabilir, ancak neyse ki benim katılımımın fabrika varsayılan sigortaları var ve 1MHz'de çalışıyor. Her halükarda, pim 6 LED'e göre voltajını titriyor.

Bu yüzden FTDI USB-seri dönüştürücünün "ftdi" ucunu minik bağlamak için küçük teller kullanıyorum : siyahtan GND'ye, kırmızıdan VCC'ye, turuncudan 6'ya. PC'de "minicom" programını açıyorum, baud'u ayarladım oranı 4800 ve bekleyin, hiçbir şey için. Boarduino'mla konuşurken hiç sorun değil.

FTDI dönüştürücü kablosu aşağıdaki çıkışa sahiptir: siyah GND, kahverengi "CTS", kırmızı VCC (+ 4.98V), turuncu "TXD", sarı "RXD", yeşil "RTS" dir.

Eğer minik bilgisayardan PC'ye iletmek istersem, "TXD" veya "RXD" üzerindeki gerilimi titretmeli miyim? Başka bir deyişle, aktarım teli slave'den konağa veya konaktan slave'e iletilecek mi?

Aslında ikisini de denedim, ikisi de çalıştı. Şimdiye kadar bir dolar değerinde ekipman daha az kızarmış ettik ve ben kendini beğenmiş alıyorum, bu yüzden sadece kabloları kablo takın. Belki "CTS" ve "RTS" kablolarını görmezden gelmem gerekiyor?

Başka kablo kullanmam gerekir mi? RTS ve CTS bir şey yapar mı?

Donanım, 4.98V'da USB ile çalışan bir ATTiny85-PU (DIP-8 paketi, 1MHz'de çalışıyor, 20MHz olarak derecelendirildi). Ana bilgisayar bir MacBook'tur ve ATtiny'yi küçük kalbini kırpmak üzere programlamak için ArduinoISP'yi kullanmak da dahil olmak üzere her şeyi arduino ile başarılı bir şekilde yapar.

Yanıtlar:


9

Sadece TX & GND kullanarak veri iletebilirsiniz.

İlk olarak, ATtiny85 TX hattını FTDI RX hattına bağlamak istiyorsunuz (TTL-232R'de sarı). USB adaptörünün 5V ile çalışabildiğinden emin olun - 3.3V TTL-232R'nin bile 5V toleranslı olduğundan eminim.

SoftwareSerial için örnek sayfaya göre , kurulum işlevinizdeki TX ve RX çizgilerinin yönünü ayarlamanız gerekir:

// include the SoftwareSerial library so you can use its functions:
#include <SoftwareSerial.h>

#define rxPin 2
#define txPin 3
#define ledPin 13

// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
byte pinState = 0;

void setup()  {
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
}

Baud hızı sizin durumunuzda 4800 olacaktır. SoftwareSerial kitaplığı CTS & RTS'yi desteklemiyor gibi görünüyor, bu nedenle bunları ana bilgisayar yazılımında kullanmadığınızdan emin olun.

Kontrol et referans onlar küçücük iç osilatör kullanılarak 1MHz çalışan eğer şiddetlenebilir bazı potansiyel zamanlama sorunları hakkında konuşmak daha fazla ayrıntı için sayfa.


Teşekkürler! Referans sayfası, 4800'ün çok hızlı olduğunu açıkça belirtti, bu yüzden 300 baud'a düştüm ve işler "daha iyi". PinMode iletimi etkilemez, ancak işleri daha net hale getirmek için yine de ekledim. Şimdi bir şey alınana kadar bitler arasındaki gecikmeyi değiştirmeyi yavaşlatmaya çalışıyorum. Minicom sadece gösteriyor mu? işaretler. En kötüsü, 16mhz ve 20mhz osilatörlerim Cuma günü geliyor.
Jack Schmidt

Sence voltaj problemi olabilir mi? Zamanlamayı ayarlamak hala işe yaramadı ve çok fazla soru işareti alıyorum, bu yüzden bir şey iletiliyor. Vcc'yi minik 3V'a düşürerek düzeltebilir miyim, yani USB yerine bazı pillere bağlayabilir miyim? Topraklamayı hem USB topraklamasına hem de pil topraklamasına mı bağlarım?
Jack Schmidt

Oh, ayrıca sarı telin miniklerin iletmesi için işaret ettiğin için teşekkürler. Turuncu tel çok titriyor (PC'den bir LED'e bağlı). Bilgisayar iletim yapıyor mu veya çoğu zaman "açık" kalıyor mu?
Jack Schmidt

Evet, iletim sırasında boşta ve titreşimde HI kalmalıdır - FTDI'nin bir LED sürmek için yeterli akım sağlayabildiğinden emin değilim. AVR iyi olacak, ancak LED'i FTDI-TX hattından çıkaracağım. Crystal zamanlama sorunlarını düzeltmelidir (ancak sigortaları dahili osilatörden geçecek şekilde ayarlamanız gerekir).
Peter Gibson

Hala üzerinde çalışıyoruz, ancak bunun bir zamanlama sorunu veya korkunç bir Arduino-on-ATTiny yazılım sorunu olduğuna ikna oldum. Birkaç orta 2-3 bayt alınır (ancak görüntülenmez) ve geri kalanı 0x80 olarak karıştırılır. Kristal beklerken kendi (önemsiz) AVR yumuşak seri gönderme fonksiyonumu yazacağım. Nelerin gönderildiğini görmenin kolay / ucuz bir yolu var mı? 300 baud hala yaşlı gözlerim için oldukça hızlı.
Jack Schmidt

7

Yani cevap şu şekilde görünüyor: sen yapabilirsiniz sadece gerçekten sadece (siyah) ve RXD (sarı) GND ve her şey sürece yazılım iyidir gibi çalışır, telleri bağlamak.

Önemli olmayan şeyler:

  • Dahili osilatör gayet iyi çalışıyor. Sınırlayıcı testime göre nispeten kararlı görünüyor. 9600 baud'da problemleri ne olursa olsun ihmal edilebilir.

  • USB gücünü sinyallerde kullanmak gayet iyi çalışıyor. Ayrı bir voltaj kaynağı kullanabilirsiniz (ortak bir toprak paylaşır), ancak FTDI kablosu hem 3V hem de 5V sinyallerini mükemmel bir şekilde okur. Hem FTDI hem de minik GND'ye, minik VCC'ye + bir batarya paketi bağladım ve bu gayet iyi çalıştı. Bununla birlikte, sadece FTDI'nın (USB gücü 5V) VCC'yi (kırmızı) kullanmak çok daha basit ve aynı derecede etkilidir.

Yanlış yaptığım şeyler:

  • Sarı FTDI "RXD" hattı mikrodenetleyiciden bitler alır, böylece mikrodenetleyicideki iletime bağlanır. İletim ve alma hatlarını (turuncu ve sarı) LED'lere veya bir Arduino'ya bağlayarak ve bilgisayardan ilettiğimde hangi voltajın titrediğini kontrol ederek bunu kendim çözebilirdim.

  • Ne SoftwareSerial ne de NewSoftSerial bir ATtiny ile kutudan çıkmaz. ATmega328p ve ATtiny85 birçok benzerlik paylaşsa da, eski yazılımın yeni çip için derlenmesini sağlamak yeterli değildir.

  • Daha düşük baud hızları bir şeyleri iyileştirmez. 300 baud, bitler arasındaki döngü sayısı 8 bitlik bir sayaçtan önemli ölçüde fazla olduğu için daha karmaşık gecikme rutinleri gerektirir. 9600 baud gayet iyi çalışıyor ve daha yüksek baud hızları yapılabilir.

  • C, özellikle satır içi işlevlerde zamanlama kritik kod yazarken dikkatli olun. Yürütme süresi, derleyicinin onu nasıl optimize ettiğine bağlı olacaktır. Özellikle, gecikmeyi sadece yukarı ve aşağı değiştirerek kalibre ederken, (derleme zamanı tespit edilebilir) sabit bir gecikme kullanmaktan farklı bir cevap alırsınız, çünkü üretilen montaj oldukça farklı olabilir. C'nin "yavaş" olması değil, çok hızlı olması. Bir noktada 0'lardan 1s daha hızlı gönderiyordum (muhtemelen daha aerodinamiktirler).

  • Bir iletim başlatmak için hattı DÜŞÜK (başlangıç ​​biti) getirin ve ardından hattın sonraki 8 numune noktasının her birinde doğru voltajda olduğundan emin olun ve ardından 9. örnekte voltajın YÜKSEK olduğundan emin olun. . NewSoftSerial, başlangıç ​​bitinde yarım uzunlukta bir gecikme yaptığından bahsediyor, ancak bu benim için iyi çalışmadı. Başlangıçta% 75, sonunda% 125 gecikme kullandım.

  • Voltajla ilgili gerçek endişe, bazı "seri" (özellikle RS232) 0V / 5V değil ± 12V olabilir. Voltajı 5V'dan 3.3V'a nasıl ayarlayabildiğimi anlamaya çalışmak için çok zaman harcadım, ancak bunun tamamen alakasız olduğunu düşünüyorum.

Her halükarda, seri iletimi kolaydır, ancak zamanlamayı "mükemmel" hale getirmek oldukça önemlidir. Benim için, bu sadece döngüyü sayabilmem için aktarımı derlemede kodlama meselesiydi.


2
1'in daha aerodinamik olması için +1 :) FTDI TTL232R, standart bir seri bağlantı noktasıyla doğrudan arabirim kuruyorsanız, mantık seviyesi uart sinyalleri (0-5V) verir, voltajı dönüştüren MAX232 gibi bir arayüz IC'sine ihtiyacınız olacaktır her iki yönde de seviyeler.
Peter Gibson

Çalıştırdığı için tebrikler. Ayrıntılı yazınız için teşekkür ederim, umarım bu ATtiny projelerinde diğer birçok insana yardımcı olur.
davidcary
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.