Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: izturk - 26 Aralık 2016, 15:03:37

Başlık: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: izturk - 26 Aralık 2016, 15:03:37
Merhaba arkadaşlar,

Hali hazırda çalışan bir rs485 haberleşmesinden bir takım bilgiler almak istiyorum. Docklight isimli terminal programıyla bilgilere bakıyorum.
Ancak data bit i 7 yaptığım zaman düzgün veriler geliyor.

Stm8s003 ile bu devreyi yapmak istedim. Ama data biti nereden 7 ayarlayacağımı bir türlü bulamadım.

/////////////////
Bit 4 M: word length.
This bit determines the word length. It is set or cleared by software.
0: 1 Start bit, 8 Data bits, n Stop bit (n depending on STOP[1:0] bits in the UART_CR3 register)
1: 1 Start bit, 9 Data bits, 1 Stop bit
Note: The M bit must not be modified during a data transfer (both transmission and reception) In LIN
slave mode, the M bit and the STOP[1:0] bits in the UART_CR3 register should be kept at 0.
//////////////////

sadece böyle bir register la 8 ve 9 bit ayarlanıyor.

direk ayarlanmasa bile yazılımsal olarak 7 bit için bişeyler yapılabilir mi?

herkese iyi çalışmalar.
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: eeburakdemir - 26 Aralık 2016, 15:27:00
Peki şöyle bir teklifte bulunsam :)

uint8_t UART1_ReceiveData8(void)
{
  return ((uint8_t)UART1->DR);
}

bu gelen veriyi almak değil mi ? Aldığın veriyi 1 bit kaydırsan nasıl olur ? Tabi 7 bit yaparken hangi bitin nerede olduğu önemlidir belki , ona göre de ara değişken tanımlayıp istediğin bitler ile oynama durumu oluşturulabilir.
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: izturk - 26 Aralık 2016, 15:35:19
Benim de aklıma böyle birşey yapmak geldi ama veriler arasında bir bağıntı kuramadım.

Örneğin 0x2D  0x2D  0x2D  0x2D 0x6F 0x20 0x50 0x69 0x6E 0x67 gönderiyorum bilgisayardan
             0xAD  0xAB  0xA5  0xBD 0xA0 0x4B 0xEE 0xFE 0x00 0x00 alıyorum
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: MrDarK - 26 Aralık 2016, 16:45:17
8 Data bits dediği datanın içinde birde parity bilgisi olması gerek o dahil 8 Data biti kullanıyor olabilir.
Usart Init kodlarınızı tam olarak görmek daha kolay çözüm olacaktır.
Eğer Örneğinizdeki datayı tam almak istiyorsanız Data Bits kısmını 9 seçin.
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: Klein - 26 Aralık 2016, 20:02:47
7 bit haberleşen olan uygulamalar genellikle parite biti kullanırlar.  Aldığın veriyi   0x7F ile AND işlemine sokarsan veriyi  düzgün alırsın. Pariteye bakmazsan bu işini görür.  Fakat  karşı taraf parite ile ilgileniyorsa o zaman gönderirken pariteyi eklemen gerek.  Hatırladığım kadarıyla STM serilerinde 7 bit haberleşme yok. Pariteyi kendin eklemen gerek.

Haberleşmeyi 8 bit No parity olarak kuracaksın.
Alırken veriyi 0x7F  ile AND işlemine sokacaksın.
gönderirken  pariteyi hesaplayıp  7. biti 1 ya da 0 yapacaksın.
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: MrDarK - 26 Aralık 2016, 22:19:03
Klein hocam stm8 de donanımsal parity kullandım. Kendisi hesaplıyor
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: izturk - 26 Aralık 2016, 23:45:45
Mrdark hocam init kodlarını yarın sabah eklerim.
Klein hocam ilk byte tamam
0x7F && 0xAD = 0x2D
Ama ikinci baytta iş bozuluyor
0x7F && 0xAB = 0x2B oysa 0x2D gondermistik.
Arada bir bit kayıp mı oluyor acaba
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: izturk - 27 Aralık 2016, 09:54:10
void InitUART(void)
{
  UART1_BRR2  = 0x01;           //Baud rate
  UART1_BRR1  = 0x1A;           //Baud rate       
  UART1_CR2_REN  = 1;           //RX açık       
  UART1_CR2_TEN  = 1;           //TX açık
  UART1_CR2_RIEN = 1;           //RX kesmesi aktif
 

}
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: Klein - 27 Aralık 2016, 19:13:47
Alıntı yapılan: MrDarK - 26 Aralık 2016, 22:19:03
Klein hocam stm8 de donanımsal parity kullandım. Kendisi hesaplıyor
Donanımsal parity var da. 7 bit yok. Parity kullandığında parite 9. bite yazılıyor. 7+1 yok. STM32F103'te yok.  STM8 de de olduğunu sanmam.
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: Klein - 27 Aralık 2016, 19:19:56
Alıntı yapılan: izturk - 26 Aralık 2016, 23:45:45
Mrdark hocam init kodlarını yarın sabah eklerim.
Klein hocam ilk byte tamam
0x7F && 0xAD = 0x2D
Ama ikinci baytta iş bozuluyor
0x7F && 0xAB = 0x2B oysa 0x2D gondermistik.
Arada bir bit kayıp mı oluyor acaba

Gönderici ve alıcının konfigürasyonu nedir?
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: Zoroaster - 27 Aralık 2016, 19:34:57
8 bit modunda veriyi göndermeden önce 0x80 ile OR işlemine tabi tut sonucu yolla.

Alırken de gönderen tarafa 2 stop bit yolla de. Ama kendini tek stop bite ayarla ya da gönderen tarafa makineli tüfek gibi veri yollatma iki karakter arasında fasılalar olsun.
Başlık: Ynt: stm8s003 UART Data Bit i 7 olarak ayarlamak
Gönderen: izturk - 28 Aralık 2016, 18:05:05
Arkadaşla sizi boş yere meşgul etmişim sanırım.

İlk denememde olmamıştı. sonradan tekrar baktım ve 8bit olarak ayarlayınca da sistemden aynı verileri aldım. Kusura bakmayın.

Ama yine de olayın mantığını anlamış değilim. Hem 7 bitte hem 8 bitte aynı acsi değerler geliyor. asci 8 bit değil mi. 7 bite ayarlayınca karışması gerekmez mi?