Arkadaşlar merhaba.
Dspic33f mcu ile Adc'den okuduğum değeri ekrana yada seri porta printf /fprintf ile yazdırmak istiyorum. Aşağıdakileri internette bulup denedim ama netice alamadım.
fprintf (dbg, "v:%3.2f/r/n"voltValue)
sprintf(tempStr,"%3.2f"voltValue)
fprintf (dbg, "v:%s/r/n" tempStr)
fprintf (dbg, "v:%3.2w/r/n"voltValue)
Bir çıkış bulamadım.
sprintf(tempStr,"%3.2f",voltValue);
Böyle deneyin
Alıntı yapılan: serdararikan - 21 Aralık 2018, 20:07:01sprintf(tempStr,"%3.2f",voltValue);
Böyle deneyin
Bunun
sprintf(tempStr,"%3.2f"voltValue)
fprintf (dbg, "v:%s/r/n" tempStr)
İle farkını göremedim.
Değişken den önce virgül koymanız gerekiyor
printf in kök fonksiyonunu seri porta yönlendirdiniz mi peki ?
Alıntı yapılan: serdararikan - 21 Aralık 2018, 20:46:07Değişken den önce virgül koymanız gerekiyor
Ansi c istiyor biliyorum ama ccs c bu şekilde kabul ediyor.
Problemim yazdıramamak değil. Saçma sapan bir veri yazıyor. Doğru veriyi, doğru formatta alamadım.
Bunu başta belirtmem gerekirdi. Kusura bakmayın.
Alıntı yapılan: quarko - 21 Aralık 2018, 21:01:04printf in kök fonksiyonunu seri porta yönlendirdiniz mi peki ?
Dediğinizi tam anlayamadım.
@fide hocam lcd ekrana cihaz süresi ve akü voltajını yazdırdığım kısım şu şekilde;
cihaz dakika ve cihaz saniye cihazın çalışma süresini belirtiyor. dakika ve saniye 40 ise 40 olarak yazılır, 10'dan küçük 9-8-7 gibi ise 09-08-07 şeklinde yazılır akü voltajı ise float değerdir. noktadan sonra 1 hane yazılacağını temsil eder.
printf(lcd_putc,"%02d:%02d AKU %2.1fV",cihaz_dakika,cihaz_saniye,aku_voltaji);
Hocam eğer LCD ekran kullanıyorsanız bunu deneyin.
printf(LCD_PUTC,"v:%3.2f",voltValue);
Alıntı yapılan: fide - 21 Aralık 2018, 21:32:28Dediğinizi tam anlayamadım.
Normalde printf fonksiyonu usart tan veri basabilmek için değildir. Ama bunu yönlendirmek mümkün tabiki de. CCS C de bu otomatik olarak yapılıyor olabilir. Onu tam bilmiyorum. Diğerlerinde printf leri kullanabilmek için (örnek STM32), fputc fonksiyonunu usart tan veri gönderebilmek için ayarlamanız gerekiyor. Şunun gibi;
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
return ch;
}
Float printf problemi yeni bir boyut kazandı.
Dspic33fj128mc804 çipinden elimde 7-8 adet vardı. Daha önceleri çift uartı olmasından dolayı bikaç yerde kullanmıştım.
Pic24fj256gb106 çipi ile konu başlığını açarken yazdığım
fprintf(dbg,"v:%3.2f/r/n"voltValue)
kodlar düzgün çalışırken mc804 denetleyicide çalışmıyor.
Aynı şekilde fgets(deg, port) komutu da diğer denetleyicilerde çalışırken mc804 te çalışmıyor.
Sebebini anlamış değilim.
Bir de CCS C derleyici de 18f26k22 için 64 mhz pll olarak ayarlayamadım. Kristal 20mhz.
Datasheet e bakman lazım,
muhtemelen pll ancak 2 4 8 gibi sayılarla çarpabiliyordur,
yani 16MHz kristal ile 64 MHz elde edebiliyorsundur
tabi mcu o frekansta çalışabiliyor ise.