Keresés

Új hozzászólás Aktív témák

  • Janos250

    őstag

    válasz bear_ #14843 üzenetére

    "Mi lehet a hiba?"
    Fogalmam sincs, de az STM32 portjai kényelmesen használhatók közvetlen címre írással. Régebben én így csináltam.
    Én úgy próbálkoznék.

    Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

  • Aryes

    nagyúr

    válasz bear_ #14843 üzenetére

    Rossz a logika, a clock alacsony szintje alatt kell kiírni a buszra a data bitet, felfutó élnél lesz érvényes, te fordítva csinálod.
    Meg kell cserélni a

    HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_SET);

    és a

    HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_RESET);

    sorokat, így:

    while (1) {
    HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_RESET);
    for(int i = 0; i >= 15; i--) {
    HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_RESET);
    if(digits[i] == 1) {
    HAL_GPIO_WritePin(DS_GPIO_Port, DS_Pin, GPIO_PIN_SET);
    }else {
    HAL_GPIO_WritePin(DS_GPIO_Port, DS_Pin, GPIO_PIN_RESET);
    }
    HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_SET);
    }
    HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_SET);

    }

    Az is lehet, hogy túl gyorsan küldi ki a kód a biteket, nem tudom milyen órajelen fut a kontrollered, de vmi minimális delay kellhet esetleg a for ciklus végére, a bitek közé, ha a fenti kód se működne helyesen.

    [ Szerkesztve ]

  • bear_

    aktív tag

    válasz bear_ #14843 üzenetére

    Megvan a probléma, a for ciklust rontottam el.

    Viszont itt is a következő problémám:

    Azt szeretném, ha nyomógomb megnyomására egyel magasabb értéket jelenítene meg a 7 szegmenses kijelző.

    0 az alapállapot, és ha nyomva tartom akkor felugrik 1-re, ha elengedem akkor visszaugrik 0-ra. Gyanítom ez azért van mert végigfut a kód és nullázódik a mikrokontroller. Hogy lehet azt megoldani, hogy a változó megjegyezze az értéket?

    kód:

    while (1) {
    int num=0;
       if(HAL_GPIO_ReadPin(SW1_GPIO_Port, SW1_Pin)==0){
       num++;  
    }  
     HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_RESET);
         for(int i = 0; i <= 15; i++) {
          HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_RESET);
         if(digits[num][i] == 1) {
         HAL_GPIO_WritePin(DS_GPIO_Port, DS_Pin, GPIO_PIN_SET);
         }else {
         HAL_GPIO_WritePin(DS_GPIO_Port, DS_Pin, GPIO_PIN_RESET);
      }                
    HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_SET);
      }
    HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_SET);
     }
    }

Új hozzászólás Aktív témák