STM32F10X Çalışmalarım

Başlatan Mucit23, 12 Mart 2012, 11:17:48


camby

Alıntı yapılan: blacklogic - 04 Ağustos 2013, 23:07:58
https://www.picproje.org/index.php/topic,48144.0.html
donanimsal olarak cikiyor mu peki bu sinyal ? Sadece register datasi girerek yani.

Yoksa pwm sinyali olusturup yazilimsal olarak acip kapatiyor musunuz

blacklogic

Alıntı yapılan: camby - 05 Ağustos 2013, 00:03:00
donanimsal olarak cikiyor mu peki bu sinyal ? Sadece register datasi girerek yani.

Yoksa pwm sinyali olusturup yazilimsal olarak acip kapatiyor musunuz
Donanımsal, sadece register'e bilgi yaz yeter.

Mucit23

Ersin Hocam Merhaba,

Remapping işini çözdüm. Fakat bir sıkıntım daha var. Şuanda Tim4'ün 2. Kanalından(ch2) pwm  sinyali alıyor. Ben bu pwm sinyalini Tim4 ün 2. kanalı yerine 3 veya 4. kanalından almak için hangi işlemleri yapmalıyım. Sadece gpio tanımlamalarını bu pinlere yapmak yetmiyor. (Aslında anlatmaya çalıştığım şey buydu:))

Mucit23

Yahu Çözdüm işi  :D Tamam Şimdi Herşey yerine oturdu.

Her kanal için farklı Tim_OC init fonksiyonları varmış. 2.Kanal için TIM_OC2Init, 3. Kanal için TIM_OC3Init vs. Bunların değişmesi gerekiyormuş.

Mucit23

Arkadaşlar Birkaç Problemim var. Spi hız konusunda sıkıntı çekiyorum.

Sırayla Problemlerimi yazayım

1-) Spi BaudratePrescaller değerini 4 den farklı bir değer yapınca spi saçmalamaya başlıyor. Spi le 74595 sürüyorum. Baudrate değerini 4 yaptığım zaman ,SPI clock frekansı 17-18 mhz'e yaklaşıyor. Bu frekansta 74595 çalışıyor ama bazen 74595 çıkışları milisaniyelik olarak açılıp kapanıyor. Bunun Hızla ilgili olduğunu düşünüyorum. Hızı biraz düşürmek istedim. Baudrate değerini 8 veya daha farklı bir değer yaparsam clock frekansı anlamsız oluyor. Örneğin 1Byte gönderildiği zaman 8 clock palsi olması gerekirken Saymadım ama 16 dan fazla clock palsi oluşuyor. (1 Byte için) Bu Neden olabilir?

SPI ayarlarım bu şekilde.

   /* SPI1 configuration */ 
   SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
   SPI_InitStructure.SPI_CRCPolynomial = 7;
   SPI_Init(SPI1, &SPI_InitStructure);


2-) Global Değişken nasıl tanımlanır. Bu tanımladığım değişkeni hem main programında hemde hemde main programına dahil ettiğim diğer kütüphanelerde (Örneğin SPI.c) kullanayım. Böyle bir durum mümkünmü?

3-)Timer Kesmesi oluştuğunda Spi ile hızlı bir şekilde 32 byte data göndermem gerekiyor. Her kesme oluştuğunda döngü içerisinde spi den 32 byte data gönderiyorum. Fakat SPİ data gönderme fonksiyonuna her geldiğimde program spi bufferinin boşalmasını bekliyor.

SPİ Gönderme Fonksiyonum böyle.

void SPI1_WriteByte(unsigned char writedat)
{
   /* Loop while DR register in not emplty */
   while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);

   /* Send byte through the SPI1 peripheral */
   SPI_I2S_SendData(SPI1, writedat);
}

SPİ>DR registerinin boşalması beklenince bu sefer işlemci donuyor. Aslında timer kesmesi içerisindeki en ufak bir bekleme işlemciyi donduruyor. Buradaki durumda benzer.

while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);

Bu satırı kapatınca program çalışıyor. Datalar görünüşte düzgünde gidiyor. Ama emin değilim. Burada beklemek nekadar önemli?


muhittin_kaplan

mucit CoIDE nin örneği.

/**
  ***************************************************************************** 
  * @title   SPI_Exp.c
  * @author  CooCox
  * @date    15 Mar 2011
  * @brief   This example provides a description of how to set a communicatio
  *          n between two
  *          SPIs in simplex mode and performs a data buffer t
  *          ransfer from SPI_MASTER to
  *          SPI_SLAVE.
  *          SPI_MASTER and SPI_SLAVE
  *           can be SPI1 and SPI2 or SPI3 and SPI2, depending on
  *          the STMicr
  *          oelectronics EVAL board you are using.
  *          This example poll some f
  *          lags to transmit or receive data other than using
  *          interrupts.
  *******************************************************************************
  */
////// The above comment is automatically generated by CoIDE ///////////////////

#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_spi.h"

typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;


#define BufferSize 32

SPI_InitTypeDef SPI_InitStructure;
uint8_t SPI1_Buffer_Tx[BufferSize] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
        0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
        0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,
        0x1F, 0x20 };
uint8_t SPI2_Buffer_Tx[BufferSize] = { 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
        0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62,
        0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
        0x6F, 0x70 };
uint8_t SPI1_Buffer_Rx[BufferSize], SPI2_Buffer_Rx[BufferSize];
uint8_t Tx_Idx = 0, Rx_Idx = 0;
uint32_t k;
volatile TestStatus TransferStatus1 = FAILED, TransferStatus2 = FAILED;
volatile TestStatus TransferStatus3 = FAILED, TransferStatus4 = FAILED;
ErrorStatus HSEStartUpStatus;

/***************************************************************************//**
 * Declare function prototypes
 ******************************************************************************/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
TestStatus Buffercmp(u8* pBuffer1, u8* pBuffer2, u16 BufferLength);

/***************************************************************************//**
 * @brief
 *******************************************************************************/
void SPI_Exp(void)
{
    /* System clocks configuration -------------------------------------------*/
    RCC_Configuration();

    /* GPIO configuration ----------------------------------------------------*/
    GPIO_Configuration();
    GPIO_ResetBits(GPIOC, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_6 | GPIO_Pin_7);
    /* Just delay some time */
    for (k = 0; k < 1000000; k++)
    {;}

    /* 1st phase: SPI1 Master and SPI2 Slave */
    /* SPI1 Configuration ----------------------------------------------------*/
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
    SPI_InitStructure.SPI_CRCPolynomial = 7;
    SPI_Init(SPI1, &SPI_InitStructure);

    /* SPI2 Configuration ----------------------------------------------------*/
    SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
    SPI_Init(SPI2, &SPI_InitStructure);

    /* Enable SPI1 */
    SPI_Cmd(SPI1, ENABLE);
    /* Enable SPI2 */
    SPI_Cmd(SPI2, ENABLE);

    /* Transfer procedure */
    while (Tx_Idx < BufferSize)
    {
        /* Wait for SPI1 Tx buffer empty */
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

        /* Send SPI2 data */
        SPI_I2S_SendData(SPI2, SPI2_Buffer_Tx[Tx_Idx]);

        /* Send SPI1 data */
        SPI_I2S_SendData(SPI1, SPI1_Buffer_Tx[Tx_Idx++]);

        /* Wait for SPI2 data reception */
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);

        /* Read SPI2 received data */
        SPI2_Buffer_Rx[Rx_Idx] = SPI_I2S_ReceiveData(SPI2);

        /* Wait for SPI1 data reception */
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

        /* Read SPI1 received data */
        SPI1_Buffer_Rx[Rx_Idx++] = SPI_I2S_ReceiveData(SPI1);
    }

    /* Check the correctness of written data */
    TransferStatus1 = Buffercmp(SPI2_Buffer_Rx, SPI1_Buffer_Tx, BufferSize);
    TransferStatus2 = Buffercmp(SPI1_Buffer_Rx, SPI2_Buffer_Tx, BufferSize);
    /* TransferStatus1, TransferStatus2 = PASSED, if the transmitted and
     * received data are equal */
    /* TransferStatus1, TransferStatus2 = FAILED, if the transmitted and
     * received data are different */
    if (TransferStatus1 == PASSED)
        GPIO_SetBits(GPIOC, GPIO_Pin_6);
    if (TransferStatus2 == PASSED)
        GPIO_SetBits(GPIOC, GPIO_Pin_7);

    /* Just delay some time */
    for (k = 0; k < 1000000; k++)
    {;}

    /* 2nd phase: SPI1 Slave and SPI2 Master */
    /* SPI1 Re-configuration -------------------------------------------------*/
    SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
    SPI_Init(SPI1, &SPI_InitStructure);

    /* SPI2 Re-configuration -------------------------------------------------*/
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    SPI_Init(SPI2, &SPI_InitStructure);

    /* Reset Tx_Idx, Rx_Idx indexes and receive tables values */
    Tx_Idx = 0;
    Rx_Idx = 0;
    for (k = 0; k < BufferSize; k++)
        SPI2_Buffer_Rx[k] = 0;
    for (k = 0; k < BufferSize; k++)
        SPI1_Buffer_Rx[k] = 0;

    /* Transfer procedure */
    while (Tx_Idx < BufferSize)
    {
        /* Wait for SPI2 Tx buffer empty */
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
        /* Send SPI1 data */
        SPI_I2S_SendData(SPI1, SPI1_Buffer_Tx[Tx_Idx]);
        /* Send SPI2 data */
        SPI_I2S_SendData(SPI2, SPI2_Buffer_Tx[Tx_Idx++]);
        /* Wait for SPI1 data reception */
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
        /* Read SPI1 received data */
        SPI1_Buffer_Rx[Rx_Idx] = SPI_I2S_ReceiveData(SPI1);
        /* Wait for SPI2 data reception */
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
        /* Read SPI2 received data */
        SPI2_Buffer_Rx[Rx_Idx++] = SPI_I2S_ReceiveData(SPI2);
    }

    /* Check the correctness of written data */
    TransferStatus3 = Buffercmp(SPI2_Buffer_Rx, SPI1_Buffer_Tx, BufferSize);
    TransferStatus4 = Buffercmp(SPI1_Buffer_Rx, SPI2_Buffer_Tx, BufferSize);
    /* TransferStatus3, TransferStatus4 = PASSED, if the transmitted and
    received data are equal */
    /* TransferStatus3, TransferStatus4 = FAILED, if the transmitted and
    received data are different */
    if (TransferStatus3 == PASSED)
        GPIO_SetBits(GPIOC, GPIO_Pin_8);
    if (TransferStatus4 == PASSED)
        GPIO_SetBits(GPIOC, GPIO_Pin_9);
}

/***************************************************************************//**
 *@brief
 ******************************************************************************/
void RCC_Configuration(void)
{
    /* RCC system reset(for debug purpose) */
    RCC_DeInit();

    /* Enable HSE */
    RCC_HSEConfig(RCC_HSE_ON);

    /* Wait till HSE is ready */
    HSEStartUpStatus = RCC_WaitForHSEStartUp();

    if (HSEStartUpStatus == SUCCESS)
    {
        /* HCLK = SYSCLK */
        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        /* PCLK2 = HCLK/2 */
        RCC_PCLK2Config(RCC_HCLK_Div2);

        /* PCLK1 = HCLK/2 */
        RCC_PCLK1Config(RCC_HCLK_Div2);

        /* PLLCLK = 8MHz * 9 = 72 MHz */
        RCC_PLLConfig(0x00010000, RCC_PLLMul_9);

        /* Enable PLL */
        RCC_PLLCmd(ENABLE);

        /* Wait till PLL is ready */
        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}

        /* Select PLL as system clock source */
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

        /* Wait till PLL is used as system clock source */
        while (RCC_GetSYSCLKSource() != 0x08) {}
    }

    /* Enable peripheral clocks ----------------------------------------------*/
    /* GPIOA, GPIOB and SPI1 clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC
            | RCC_APB2Periph_SPI1, ENABLE);
    /* SPI2 Peripheral clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
}

/***************************************************************************//**
 @brief Configure GPIO settings
 ******************************************************************************/
void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    /* Configure SPI1 pins: SCK, MISO and MOSI -------------------------------*/
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* Configure SPI2 pins: SCK, MISO and MOSI -------------------------------*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    /* Configure PC6~PC9 ----------------------------------------------------*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_6
            | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}

/***************************************************************************//**
 @brief
 ******************************************************************************/
TestStatus Buffercmp(u8* pBuffer1, u8* pBuffer2, u16 BufferLength)
{
    while (BufferLength--)
    {
        if (*pBuffer1 != *pBuffer2)
        {
            return FAILED;
        }
        pBuffer1++;
        pBuffer2++;
    }
    return PASSED;
}

ErsinErce

Alıntı yapılan: Mucit23 - 12 Ağustos 2013, 12:43:44
Arkadaşlar Birkaç Problemim var. Spi hız konusunda sıkıntı çekiyorum.

Sırayla Problemlerimi yazayım

1-) Spi BaudratePrescaller değerini 4 den farklı bir değer yapınca spi saçmalamaya başlıyor. Spi le 74595 sürüyorum. Baudrate değerini 4 yaptığım zaman ,SPI clock frekansı 17-18 mhz'e yaklaşıyor. Bu frekansta 74595 çalışıyor ama bazen 74595 çıkışları milisaniyelik olarak açılıp kapanıyor. Bunun Hızla ilgili olduğunu düşünüyorum. Hızı biraz düşürmek istedim. Baudrate değerini 8 veya daha farklı bir değer yaparsam clock frekansı anlamsız oluyor. Örneğin 1Byte gönderildiği zaman 8 clock palsi olması gerekirken Saymadım ama 16 dan fazla clock palsi oluşuyor. (1 Byte için) Bu Neden olabilir?

SPI ayarlarım bu şekilde.

   /* SPI1 configuration */ 
   SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
   SPI_InitStructure.SPI_CRCPolynomial = 7;
   SPI_Init(SPI1, &SPI_InitStructure);


2-) Global Değişken nasıl tanımlanır. Bu tanımladığım değişkeni hem main programında hemde hemde main programına dahil ettiğim diğer kütüphanelerde (Örneğin SPI.c) kullanayım. Böyle bir durum mümkünmü?

3-)Timer Kesmesi oluştuğunda Spi ile hızlı bir şekilde 32 byte data göndermem gerekiyor. Her kesme oluştuğunda döngü içerisinde spi den 32 byte data gönderiyorum. Fakat SPİ data gönderme fonksiyonuna her geldiğimde program spi bufferinin boşalmasını bekliyor.

SPİ Gönderme Fonksiyonum böyle.

void SPI1_WriteByte(unsigned char writedat)
{
   /* Loop while DR register in not emplty */
   while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);

   /* Send byte through the SPI1 peripheral */
   SPI_I2S_SendData(SPI1, writedat);
}

SPİ>DR registerinin boşalması beklenince bu sefer işlemci donuyor. Aslında timer kesmesi içerisindeki en ufak bir bekleme işlemciyi donduruyor. Buradaki durumda benzer.

while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);

Bu satırı kapatınca program çalışıyor. Datalar görünüşte düzgünde gidiyor. Ama emin değilim. Burada beklemek nekadar önemli?

1-) rm0008 sf:675 -> BR[2:0] -> sf:715
2-) extern static volatile int foo; // spi.h dosyasına konulacak, spi.h istediğin yerde çağrılacak
static volatile int foo; //spi.c dosyasına konulacak
3-) spi->dr'nin boşalması için okunması lazım, her hangi bir yere aktarabilirsin

Mucit23

Hocam Spi Flagını anlayamadım birtek.

Sizin dediğiniz sanırım spi->dr registerini kendimiz boşaltmak istersek geçerli

Peşi sıra spi den data gönderirken spi dr registerinin boşalmasını beklemek gerekirmi? Bunu anlayamadım.

Birde Timer kesmesinde çok ufak sürelerde bile delay koymak işlemcinin donmasına sebeb oluyor. Birtek delay değil, işlemciyi bağlayacak herhangi birşey. Bunu önlemek mümkünmü?

ErsinErce

spi bilgi gönderirken bilgi alan bir yapı bir bit giderken aynı anda bir bit gelir. 8 bit veya 16 bit veri aktarımı tamamlandığında flag aktif olur.
içeriği okuyup flag sıfırlanır. spi sonraki gönderime hazır olur

sf:676 da basit görsel yapısı mevcut

DMA, SPI interrupt kullanılabilir beklememek için

mistek

Stm32f107 de timer2 ile 1 saniyelik kesme oluşturuyorum. Ama anlamadığım bir nokta var.

Kesme oluşma süresi = (PSC*(ARR+1)) / APB

Timer2 APB1 hattına bağlı en yüksek hızda çalıştırıyorum 36MHz.

Aşağıdaki kod ile kesme içerisinde C portunun 3. pinine bağlı ledi 1 saniye aralıklarla yakıp söndürüyorum.
Timer 2 nin Counter Register ını (CNT) okuyorum ve lcd displayde gösteriyorum.

Problem:
Program başladığında CNT register ının içerisinde 7199 var. Her kesme geldiğinde içerik 1 azalıyor. Neden azalıyor ?
Birde dikkat ettim Yukarı sayıcı olarak ayarladığımda içerik azalıyor. Aşağı sayıcı olarak ayarladığımda içerik artıyor neden böyle ?

STM32 datasheetleri bana çok "yavan" geldi. LPC1769 da her bişeyin açıklamasını register satırının karşısında buluyordum.


       NVIC_InitTypeDef NVIC_InitStructure;
		TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //Timer2 clock aktif
		
		TIM_TimeBaseStructure.TIM_Period = 7199; //ARR degeri. Buraya yazilan degere gelince timer kesme olusturur.
		TIM_TimeBaseStructure.TIM_Prescaler=10000; //On bölücü degeri
		TIM_TimeBaseStructure.TIM_ClockDivision=0; //Saat bölücü
		TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //Timer modu. Yukari sayici.
		TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);	//Timer yapisi init.
	
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //Kesme adresi
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
		NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

		NVIC_Init(&NVIC_InitStructure);

		TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); 	// Timer güncellendiginde kesme olustur. timer sayici = ARR
		
		TIM_ARRPreloadConfig(TIM2, ENABLE);

		TIM_Cmd(TIM2, ENABLE);	// Timer aktif
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

camby

Hocam,

...
7197
7198
0
1
2
....
şeklinde sayması lazım sanırım , bu şekilde değil mi ?

mistek

Alıntı yapılan: camby - 25 Ağustos 2013, 21:55:39
Hocam,

...
7197
7198
0
1
2
....
şeklinde sayması lazım sanırım , bu şekilde değil mi ?

Evet CNT registerını her kesme sonunda okuyorum bu şekilde azalarak sıfıra gidiyor.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

camby

artarak aslında , up sayıyor.

Sorun yok o zaman bu şekilde ise , bir dahaki kesme 7197'de iken mi oluşuyor ?

mistek

Alıntı yapılan: camby - 25 Ağustos 2013, 22:07:36
artarak aslında , up sayıyor.

Sorun yok o zaman bu şekilde ise , bir dahaki kesme 7197'de iken mi oluşuyor ?

Evet hocam.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R