Buggfix Plus
Aktuellt datum och tid: 02.12 2019-07-20

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 1 inlägg ] 
Författare Meddelande
InläggPostat: 13.26 2019-05-12 
Användarvisningsbild

Blev medlem: 22.59 2012-09-11
Inlägg: 2878
Ort: The U.S - Chicago
Jag gjorde ett litet snabbt exempel där jag kopplar in V3.3 till en ingång och sedan lyser en LED-lampa från en utgång. Fungerar utmärkt. Men jag hade lite problem med den först med tanke på att allt verkade omvänt.

För det första så tänker jag posta hela koden här. Det ni enda behövertitta på är själva input.

Datablad finns här.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
#include "stm32f4xx.h"

int main(void) {

   /*
    * Enable GPIOA
    */
   // Enable GPIOA
   RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

   /*
    * Output
    */
   // Set GPIOA 5 as output
   GPIOA->MODER |= GPIO_MODER_MODER5_0;

   // Set the type of output for GPIOA 5 - push-pull (which is already default)
   GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_5);

   // Set the speed of GPIOA 5
   GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5;

   // Set no pull-up or pull-down for GPIOA pin 5
   GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR5);

   /*
    * Input
    */
   // But set pull-down for GPIOA pin 6
   GPIOA->PUPDR |= GPIO_PUPDR_PUPDR6_1; // GPIO_PUPDR_PUPDR6_1 = 10. se 8.4.4 i datablad

   // Set GPIOA 6 as input
   GPIOA->MODER &= ~(GPIO_MODER_MODER6); // GPIO_MODER_MODER6 = 11 . Se 8.4.1 i datablad

   // Loop
   while (1) {
      /*
       * Check if we press the button or not
       */
      if(GPIOA->IDR & GPIO_IDR_IDR_6){
         // OFF GPIOA pin 5
         GPIOA->BSRRL |= GPIO_BSRR_BS_5;
      }else{
         // ON GPIOA pin 5
         GPIOA->BSRRH |= GPIO_BSRR_BS_5;

      }
   }
}


Det jag finner lutigt med denna kod är att jag sätter GPIOA 6 som ingång. OK!
Sedan sätter jag GPIOA 6 med en pull-down. Dvs om den inte får någon ström, så ska GPIOA pin 6 vara false

Då tänkte jag att denna kod borde egentligen sätta GPIOA pin 5 som true hela tiden.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
if(GPIOA->IDR & GPIO_IDR_IDR_6){
    // OFF GPIOA pin 5
    GPIOA->BSRRL |= GPIO_BSRR_BS_5;
}else{
    // ON GPIOA pin 5
    GPIOA->BSRRH |= GPIO_BSRR_BS_5;
}


Men så är fallet inte. När jag inte har ström inkopplat på GPIOA pin 6, så lyser lampan inte. Men när jag har det så lyser lampan. Så vill jag att det ska vara. Men själva IF-satsen visar omvänt enligt mig, men den fungerar.

Fråga:
Kan det vara så att ingång på en uC är omvänt jämfört vad vi normalt tolkar verkligheten som?
Eller är det jag som har gjort något tokigt?


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 1 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 2 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010