Atmega128 Program Problem

Discussion in 'Embedded Systems and Microcontrollers' started by hhumberto.av, Feb 10, 2016.

  1. hhumberto.av

    Thread Starter New Member

    Jan 16, 2015
    3
    0
    Hi.

    Im trying to move 2 motors with an atmega128 microcontroller. The issue is that i cant change my ports values in execution time. Two results. If i dont call the reverse function, the motor never stops, and if i call reverse() Function, the motor stops, but it doesnt change the movement sense or the moovement speed.

    Here my code:


    Code (Text):
    1.  
    2.  
    3. #include <avr/io.h>
    4. #include <util/delay.h>
    5.  
    6. int cont=0;
    7.  
    8. void reverse()
    9. {
    10.           while(1);
    11.         {
    12.             PORTC=0b01010101;
    13.             PORTD|=_BV(PD0); //Se activa el bit 0 del PORTD
    14.             PORTD|=_BV(PD1); //Se activa el bit 1 del PORTB
    15.            
    16.             _delay_us(5000);
    17.             //de la función, con la variable SH, SH veces
    18.            
    19.             PORTD&=~(_BV(PD0)); //Desactiva el bit 0 del PORTD
    20.             PORTD&=~(_BV(PD1)); //Desactiva el bit 1 del PORTB
    21.            
    22.            
    23.             _delay_us(5000);
    24.         }
    25. }
    26.  
    27. void motors(int pA, int pB, int power, int duration)
    28. {
    29.  
    30.  
    31.     //PORTC=0b10101010;
    32.     PORTC=0b01010101;
    33.  
    34.    
    35.     DDRC= 0xFF; //puerto C como salida
    36.     DDRD= 0xF0;    //Nible alto del puerto D como salida
    37.  
    38.  
    39.  
    40.    
    41.         while (1)
    42.         {
    43.            
    44.             PORTD|=_BV(PD0); //Se activa el bit 0 del PORTD
    45.             PORTD|=_BV(PD1); //Se activa el bit 1 del PORTB
    46.            
    47.             _delay_us(9800);
    48.             //de la función, con la variable SH, SH veces
    49.            
    50.             PORTD&=~(_BV(PD0)); //Desactiva el bit 0 del PORTD
    51.             PORTD&=~(_BV(PD1)); //Desactiva el bit 1 del PORTB
    52.            
    53.            
    54.             _delay_us(200);
    55.            
    56.             //cont++;
    57.  
    58.         }
    59.        
    60.         //reverse();
    61.        
    62.         //    return 0; //Como la función no es void se regresa un 0
    63.    
    64.    
    65.     return;
    66. }
    67.  
    68.  
    69.  
    70.  
    71.  
    72. int main()
    73. {
    74.    
    75.         int power = -40;
    76.        
    77.         int pA=1;
    78.         int pB=2;
    79.         int duration=20;
    80.        
    81.         motors(pA, pB, power, duration);
    82.        
    83.         return 0;
    84. }
    85.  
    86.  
    87.  
    88.  
     
Loading...