-
        

Ergebnis 1 bis 1 von 1

Thema: STM32F4 mit ADNS3090, Bildfehler

  1. #1

    STM32F4 mit ADNS3090, Bildfehler

    Anzeige

    Hallo liebes Roboternetz,

    dies ist mein erster Eintrag und ich komme mit einem Problem. Über einen STM32F446 (mit 80 MHz, habe ich am MCO-Pin nachgemessen) lese ich per SPI die Bilddaten eines ADNS3090 (30x30) ein. Der SPI-Takt beträgt 1,25 MHz. Allerdings schwankt dieser laut Oszilloskop leicht zwischen 1,24 und 1,26 MHz. Über eine USART sende ich die Bilddaten an ein Matlabprogamm. Allerdings wird das Bild stets versetzt angezeigt (Die Position wechselt wechselt und ich habe stets ein 0x00 und das nebeneinder.) Die Baudrate betägt 921600 Baud.

    Laut SPI-Diagramm ist für das Schreiben MSB=1 erforderlich. Danach soll 3 Frames + 10 µs gewartet werden. Im diesen Falle ist es 1510 µs (3*1/2000+10) da die Standardframe 2000 fps beträgt. Hier meine Implementierung:

    Code:
    void adns3090_FrameCapure_Config(void)
    {
      ADNS3090_NSS_LOW;
      delay_us(1);
      adns3090_Write(SPI2,ADNS3090_FRAME_CAPTURE|0x80);
      delay_us(50);
      adns3090_Write(SPI2,0x83);
      delay_us(50); 
      ADNS3090_NSS_HIGH;
      delay_us(1510);
    }

    Hier meine Funktion zum Lesen des Register Pixel_Burst (0x40). Der Beginn jedes Frames ist als 0b0100000 = 0x40 markiert. Bei jedem Pixel ist MSB = 1. Der Linksschift resultieren durch den Framemarker und dem MSB = 1.

    Code:
    void adns3090_Pixel_Burst(uint8_t *image)
    {
     bool is_first_pixel = false;
     uint8_t adns3090_pixel;
    	
     adns3090_FrameCapure_Config(); /*Hier findet das Vorgeplänkel statt*/
     ADNS3090_NSS_LOW;          
     //adns3090_Read(SPI2, ADNS3090_FRAME_CAPTURE);
     delay_us(50);
    		
       for (i=0; i<30;i++)
       {
         for (j=0; j<30;j++)
         {
          register_val = adns3090_Read(SPI2,ADNS3090_PIXEL_BURST);
          if(!is_first_pixel && (register_val&0x40))
          {
    	i=0;
    	j=0;
    	adns3090_fail();	/*Hier leuchtet meine Debug-LED*/						
           }
    	is_first_pixel = true;
    	*image = (register_val<<2);	
    	delay_us(10); 
    	adns3090_pixel = *image;
    	image++;
    	send_image(adns3090_pixel); /*meine USART*/
    	//delay_us(50);
          }  
        }
     ADNS3090_NSS_HIGH;
     delay_us(50);
     }
    Die USART-Senderoutine:

    Code:
    void send_image (uint8_t temp)
    {
      USART_SendData(USART3, temp);
       while(!(USART3->SR & USART_FLAG_TXE));
    }
    In der Main habe ich folgendes implementiert.
    Code:
    uint8_t picture[2000];
    
    int main (void)
    {
      startUp(); /*GPIO, RCC, usw.*/
      USART_config(); /*USART, Senderoutine*/
      //bma020_SPI_SETTINGS();
      adns3090_STARTUP(); /*GPIO, SPI2, RCC */
      SysTick_Init(); 
    
       while(1)
        {
          SystemCoreClockUpdate();	
          adns3090_Pixel_Burst(picture); /*Meine Funktion*/
        }
    }
    Was könnte hier die Ursache sein? Könnt Ihr mir einen Tipp geben?
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Teppich.png   FRAME_CAPTURE.jpg  

Ähnliche Themen

  1. STM32F4 NaN ohne erkennbaren Fehler
    Von Che Guevara im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 5
    Letzter Beitrag: 06.03.2015, 15:19
  2. STM32F4 Discovery + FreeRTOS: Zwei Probleme
    Von BoondockDuck im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 4
    Letzter Beitrag: 06.12.2012, 13:06
  3. LCD Libary für STM32F4
    Von Stones im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 13.07.2012, 13:55
  4. Boot - Telemetrie System mit WLAN (STM32F4)
    Von lord-maricek im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 17.06.2012, 18:36
  5. STM32F4 Discovery und arm-none-eabi-gcc
    Von Torrentula im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 21.03.2012, 18:33

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •