Deze vraag is misschien een beetje teveel maar ik ga ze toch stellen:

Ik weet niks van AVR en C !! en ik wou snel ff een PWM progje hebben (eentje gevonden op avrfreaks)
maar das in C en ik wil met 2 knopje de snelheid hoger (dutycycle groter) of lager ipv met de PC wat in dit voorbeeldje staat


/*********************************************
Date    : 3/27/2001                                                          
Author  : Jorge Jaar                      
Company : Tohoku University  Sendai, Japan                   
Comments: This progm is designed to control a DC motor by means of PWM
with feedback from a led/photodiode and serial interface to a computer.

Chip type           : AT90S2313
Clock frequency     : 4.000000 MHz
Memory model        : Tiny
Internal SRAM size  : 128
External SRAM size  : 0
Data Stack size     : 32
*********************************************/

#include <90s2313.h>
#include <delay.h>
#include <stdio.h>
#include <lcd.h> 
#include <stdlib.h>

#asm
   .equ __lcd_port=0x18
#endasm

void main(void)
{
//Local Variables
char 	buf[15],
	srpmi[3],
	srpms[3];

int 	rpms=0,
	rpmsn=0,
	x,
	rpmi=750;

// Input/Output Ports initialization
// Port B
DDRB=0x08;	//00001000
PORTB=0x08;    	//00001000

// Port D
DDRD=0x00;	//00000000
PORTD=0x08;     //00001000  

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
// Mode: Output Compare
// OC0 output: Disconnected
TCCR0=0x05;	//00000101
TCNT0=0x00;     //00000000

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: 8 bit Pulse Width Modulation
// OC1 output: non inv
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x81;	//10000001
TCCR1B=0x04;   	//00000100
TCNT1H=0x00;   	//00000000
TCNT1L=0x00;	//00000000
OCR1H=0x00;     //00000000
OCR1L=0x00;     //00000000

// UART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// UART Receiver: On
// UART Transmitter: On
// UART Baud rate: 9600
UCR=0x18;    	//00011000
UBRR=0x19;	//00011001

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;	//10000000

//intro: LCD module initialization and motor startup
lcd_init(16);
lcd_putsf("  motor driver");
delay_ms(2000);
OCR1L=050;	

while (1)
      {   
          
//get the intended rpms if key pressed POLL UART
        if(USR.7==1)
        {           
       		gets(srpmi,3);          	       		
       		rpmi=atol(srpmi);
		lcd_gotoxy(0,1);
		lcd_puts(srpmi);
	
	};                              


     
//get frequency (rpms)
	rpmsn=0;
      	do{
      		if(PIND.3==0)
      		{            
      			
      			do
      			{}while(PIND.3==0);
      			TCNT0=0;
      			do
      			{}while(PIND.3==1);
      			x=TCNT0;
      			rpmsn=(14000/x);
      		};
      	}while(rpmsn==0);
      
         
//update lcd if data changed 
      	if ((int)(rpms)!=(int)(rpmsn))
      	{ 
      		sprintf(buf, "speed=%urpm",rpmsn);
      		lcd_gotoxy(0,0);
       	       	lcd_puts(buf);
       		rpms=rpmsn;
       		//putchar("r");
       		itoa(rpms, srpms);
       		putchar(srpms); 
       		//make srpmi an int
       	
       			
     	}; 
       
     		OCR1L=OCR1L+((rpmi-rpms)/30);

      	if (OCR1L>250)
       		OCR1L=250;
       	if (OCR1L<10)
       		OCR1L=10;  
       	delay_ms(100);

     		 
};

}

zou iemand zo lief willen zijn om dit beetje aan te passen (lijkt me niet zoveel werk voor een ervaren iemand denk ik ?
Ik zou zeer dankbaar zijn !

Aedolon

is voor een klein DC Motortje

een C programma ? je doet alsof je nog nooit van je leven C hebt gezien maar terug ontopic

In een van de eerste regels staan "includes" naar '90s2313.h' en 'lcd.h' die je er absoluut bij moet hebben om uberhaupt iets te kunnen wijzigen. De andere zijn standaards die al bij de compiler zitten, hoewel ik twijfel aan 'delay.h'.
Veel verder kan ik je er niet mee helpen helaas.

yup ik ken C hoor maar geen AVR C

Ik zal wel die C compiler vinden hoop ik ?
is er echt niemand lief genoeg tsss ? :)
mag ik het dadelijk nog in assembler gaan tikken en zoveel tijd heb ik niet

Ok, dan als er niemand lief genoeg is heeft iemand een link naar een AVR C tut ?

Prog in assembler. gewoon in de aanstuur loop even de knoppen pollen en de nodige code daaruit starten.

Probeer een structuur als:
loop [uitgang hoog,delay volgens teller, poll knoppen,uitgang laag,delay volgens teller2]

als een knop ingedrukt is de tellervariabal aanpassen dat het tellen minder lang/langer duurt en daar is je regelbare pwm :)

Beter zou zijn de pwm outputs van de AVR te gebruiken via de 8/16bit counter in pwm mode maar aangezien je er nog niets van af weet zou ik het eerst zo proberen.

hmmm mja maar is er echt niemand die AVR C kan op CO ?
die ene link naar een tut wilt geven of zo lief zo zijn om dat aan te passen ?
wat een ontgoocheling

AVR C ???

Het is gewoon C hoor. Je hoeft alleen maar te weten waar de variabelen en extra functies voor staan. De variabelen in hoofdletters zijn zo te zien predefined voor de AVR. Een reference van de gebruikte libraries is voldoende om daar achter te komen. Overigens is ook uit het commentaar al veel op te maken. Ook de functies beginnende met lcd_ spreken al voor zich.

Marcel

yes dat is het probleem ik moet de libs vinden zodat ik de functies weet
het is veel makkelijker trouwens om te lezen wat de functies doen dan de hele libary te ontleden met gebrekkige programma commentaar

Ik heb C nog steeds niet kunnen begrijpen :S Wat zit er nou in zo include file?

En wat is de ligica in het heel veel ( ( ) ) die je tig x hebt en zowat on overzichtelijk word :7

Hmm misschien komt het omdat ik visual basic ben gewend :)

Op 10 september 2003 21:04:15 schreef Aedolon:
yes dat is het probleem ik moet de libs vinden zodat ik de functies weet
het is veel makkelijker trouwens om te lezen wat de functies doen dan de hele libary te ontleden met gebrekkige programma commentaar

Dan doe je toch even wat research. Met wat zoeken op google ben ik d'r inmiddels als achter dat bijvoorbeeld de CodeVision AVR compiler met deze include files geleverd wordt. (de lite versie is freeware voor niet commercieel gebruik en kan je dus zo downloaden)

Aan de naam van de include file 90s2313.h kan je al afleiden dat de code dus geschreven is voor een AT90S2313. Kijk je in de bijbehorende datasheet van die AVR dan worden de namen van de variabelen ineens duidelijk, want het zijn gewoon de namen van de register exact zoals deze in de datasheet genoemd worden.

Zelfs zonder enige kennis van AVR-controllers kan ik daar nog achter komen.

Marcel

Je bent geniaal thanks ;)
ik snap die includes wel lol ik ken gewone C maar dan met linux gcc libs..

AVR-GNUcc ? kijk eens op www.avrfreaks.net daar gebruiken ze veel C

/edit hier : http://www.avrfreaks.net/AVRGCC/index.php

[Bericht gewijzigd door Koen Van Vlaenderen op ]