Cześć, chciałem sobie skonfigurować atmege8L na 8Mhz ale mam z tym problemy skonfigurowałem fuse bity na tyle na jle zrozumiałem datasheeta(zdjęcie zamieszczam niżej).Następnie odczytałem wartość z pony proga (Read osc. calibration byte) wartość 0xAC.I Napisałem taki prosty program testowy na zwykłęj procedurze - delayms.
#include <avr/io.h>
#include "lcd.h"
int main(void)
{
OSCCAL=0xAC;
LCD_init();
LCD_xy(0,0);
LCD_putstr_P(PSTR("START"));
delayms(3000);
LCD_clear();
LCD_xy(0,0);
LCD_putstr_P(PSTR("START"));
for(;;){}}
I nie stety spaźnia około 4x
sprawdziłem na symulatorze na wart 5ms i tam pokazuje ze sama taa instruckja wykonuje sie 23ms. Co jest nie tak ,czegoś brakuje ,a może coś pomyliłem prosze o POMOC.!!
Atmega8L i OSCCAL
-
ZbeeGin
Fusy ustawiłeś dobrze.
delayms nie jest godne polecenia przy dokładnym odmierzaniu czasu. Skorzystaj raczej z Timera w połączeniu niestety z "rasowym" kwarcem. Niestety wewnętrzny RC nie jest - bo nie może być - stabilny i powtarzalny.
Niestety żaden symulator, zwłaszcza wysokiego poziomu nie jest w stanie dokładnie ustalić czasu wykonania każdej z instrukcji. Nie zapominaj także, by właściwie ustawić częstotliwość taktowania procesora w symulatorze.
W realnym układzie opóżnienie pomiędzy dwoma wydrukami na wyświetlaczu będą obarczone opóźnieniami samego wyświetlacza. Samo polecenie CLR trwa 2 ms!
delayms nie jest godne polecenia przy dokładnym odmierzaniu czasu. Skorzystaj raczej z Timera w połączeniu niestety z "rasowym" kwarcem. Niestety wewnętrzny RC nie jest - bo nie może być - stabilny i powtarzalny.
Niestety żaden symulator, zwłaszcza wysokiego poziomu nie jest w stanie dokładnie ustalić czasu wykonania każdej z instrukcji. Nie zapominaj także, by właściwie ustawić częstotliwość taktowania procesora w symulatorze.
W realnym układzie opóżnienie pomiędzy dwoma wydrukami na wyświetlaczu będą obarczone opóźnieniami samego wyświetlacza. Samo polecenie CLR trwa 2 ms!