|  | roboforum.ruТехнический форум по робототехнике. |  | 
Сергей писал(а):Я не понял кто что взял. Могу написать работу с таймером, работу с портами ввода\вывода к примеру
 и blindman хотел вводную написать, но пока не начинал.
 и blindman хотел вводную написать, но пока не начинал.
=DeaD= писал(а):(формат в каком будем выкладывать? PROTEUS + jpg из него?)

 считай что зову
 считай что зову 

Скажи что написать нужно.=DeaD= писал(а):Так там почти всё работа с перифериейсчитай что зову

Сергей писал(а):Скажи что написать нужно.



Не нужно дублировать, я узнал что хотел.=DeaD= писал(а):Сергей писал(а):Скажи что написать нужно.
Так там есть список уроков, я пока кроме мигания светодиодом еще ничего не сделал, выбирай любой из списка:
[[Курс "Программирование МК AVR на Си"]]
или список сюда продублировать?
Разберемся. Буду делать и выкладывать сюда, с вики не дружу пока.=DeaD= писал(а):Я пока никакой в темах №4.3, 5.х, слабоват в теме 4.1, 4.2.
#include <avr/io.h>
#include <stdint.h>
void usart0_init( uint32_t baudrate );
void usart0_putchar( uint8_t data );
uint8_t usart0_getchar( void );
void usart0_putstr( char *str );
void usart0_getstr( char *str, uint8_t length ) ;
void usart0_init( uint32_t baudrate )
{
   uint16_t bauddiv = ( ( F_CPU + ( baudrate * 8L ) ) / ( baudrate * 16L ) - 1 );
   UBRRL |= bauddiv;
   UBRRH |= ( bauddiv >> 8 ); 
   UCSRB |= ( 1 << TXEN ) | ( 1 << RXEN );
}
void usart0_putchar( uint8_t data )
{
   while( !( UCSRA & ( 1 << UDRE ) ) );
   UDR = data;
}
uint8_t usart0_getchar( void )
{
   while( !( UCSRA & ( 1 << RXC ) ) );
   
   return UDR;
}
void usart0_putstr( char *str ) 
{
   while( *str ) 
      usart0_putchar( *str++ );
}
void usart0_getstr( char *str, uint8_t length ) 
{
   while( length )
   {
      *str = usart0_getchar();
      
      if( *str == 'n' || *str == 'r' )
         break;
      
      str++;
      length--;
   }
}
int main( void )
{
   char tmp_str[] = "Hello, world!nr";
   
   usart0_init( 9600 );
   
   usart0_putstr( tmp_str );
   
   while( 1 )
   {
      char buffer[64] = { 0 };
      
      usart0_getstr( buffer, 64 );
      
      usart0_putstr( buffer );      
   }
   
   return 0;
}#include <avr/io.h>
ISR( INT0_vect )
{
   PORTD |= ( 1 << PD4 );
}
ISR( INT1_vect )
{
   PORTD &=~( 1 << PD4 );
}
int main( void )
{
   DDRD &=~ ( 1 << PD2 ) | ( 1 << PD3 );
   PORTD |= ( 1 << PD2 ) | ( 1 << PD3 ) | ( 1 << PD4 );
   
   DDRD |= ( 1 << PD4 );
   
   MCUCR = 0;
   GICR |= ( 1 << INT0 ) | ( 1 << INT1 );
   
   sei();
   
   while( 1 );
    
   return 0;
}#include <stdint.h>
#include <stdlib.h>
#include <string.h>
void usart0_init( uint32_t baudrate );
void usart0_putchar( uint8_t data );
uint8_t usart0_getchar( void );
void usart0_putstr( char *str );
void usart0_getstr( char *str, uint8_t length );
void eeprom_write( uint16_t address, uint8_t data );
uint8_t eeprom_read( uint16_t address );
void usart0_init( uint32_t baudrate )
{
   uint16_t bauddiv = ( ( F_CPU + ( baudrate * 8L ) ) / ( baudrate * 16L ) - 1 );
   UBRRL |= bauddiv;
   UBRRH |= ( bauddiv >> 8 ); 
   UCSRB |= ( 1 << TXEN ) | ( 1 << RXEN );
}
void usart0_putchar( uint8_t data )
{
   while( !( UCSRA & ( 1 << UDRE ) ) );
   UDR = data;
}
uint8_t usart0_getchar( void )
{
   while( !( UCSRA & ( 1 << RXC ) ) );
   
   return UDR;
}
void usart0_putstr( char *str ) 
{
   while( *str ) 
      usart0_putchar( *str++ );
}
void usart0_getstr( char *str, uint8_t length ) 
{
   while( length )
   {
      *str = usart0_getchar();
      
      if( *str == '\n' || *str == '\r' )
         break;
      
      str++;
      length--;
   }
}
void eeprom_write( uint16_t address, uint8_t data )
{
   while( EECR & ( 1 << EEWE ) );
   EEAR = address;
   EEDR = data;
   EECR |= ( 1 << EEMWE );
   EECR |= ( 1 << EEWE );
}
uint8_t eeprom_read( uint16_t address )
{
   while( EECR & ( 1 << EEWE ) );
   EEAR = address;
   EECR |= ( 1 << EERE );
   return EEDR;   
}
int main( void )
{
   char str_enter_cmd[] = "Enter command ( 'r' to read, 'w' to write ): ";
   char str_enter_addr[] = "Enter address: ";
   char str_enter_value[] = "Enter value: ";
   char str_default[] = "Wrong command, try again!\n\r";
   char str_value[] = "Value is: ";
   
   usart0_init( 9600 );
   
   while( 1 )
   {
      char buffer[8] = { 0 };
      int addr = 0;
      uint8_t value = 0;
      
      usart0_putstr( str_enter_cmd );
      
      switch( usart0_getchar() )
      {
      case 'r':
         usart0_putchar( '\r' );
         
         usart0_putstr( str_enter_addr );
         
         usart0_getstr( buffer, sizeof( buffer ) );
         
         addr = atoi( buffer );
         
         memset( buffer, 0, sizeof( buffer ) );
         
         value = eeprom_read( addr );
         
         usart0_putstr( str_value );
         
         usart0_putstr( itoa( value, buffer, 10 ) );
         
         break;
         
      case 'w':
         usart0_putchar( '\r' );
                  
         usart0_putstr( str_enter_addr );
         
         usart0_getstr( buffer, sizeof( buffer ) );
         
         addr = atoi( buffer );
         
         memset( buffer, 0, sizeof( buffer ) );
         
         usart0_putchar( '\r' );
         
         usart0_putstr( str_enter_value  );
         
         usart0_getstr( buffer, sizeof( buffer ) );
         
         value = atoi( buffer );
         
         memset( buffer, 0, sizeof( buffer ) );
         
         eeprom_write( addr, value );
         
         break;
         
      default:
         usart0_putstr( str_default );
         break;
      }
      
      usart0_putchar( '\r' );
      
   }
   
   return 0;
} 2.rar
 2.rar А это всё под АТМега32?
 А это всё под АТМега32?

=DeaD= писал(а):2Сергей: О! респект!А это всё под АТМега32?
blindman писал(а):Для EEPROM есть стандартные функции определенные в avr/eeprom.h

Сергей писал(а):Это конечно очень удобно и тп. Но ведь в курсе мы показываем "как это работает"

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0