Sytuacja wygląda tak : robię przetwornicę sterowaną przebiegiem pwm z mikrokotrolera 90s2313 . Przeszedłem własnie do fizycznej realizacji projektu i jak to bywa nic nie działa. Procesorek puściłem na 10 MHz i zauważyłem ,ze działa on dosyć dziwnie (nie normalnie). Na płytce tuż przy procesorze znajdują się dwa mikrostyki to obsługi urządzenia (podłaczone do masy i procesora). Po wciśnięciu przycisku i zadaniu stanu niskiego na wejściu procesora wykonywane są tam jakieś operacje w programie. Tymczasem procesor wykonuje je pomimo ,że przycisk nie został wciśnięty ,wystarczyło zbliżyć ręke
8O . Procesor jest wersją 10PI ,więc powinien wytrzymać 10 MHz.Jak się tego pozbyć ?? Nie wiem czy wymienić kwarc na inny i zobaczyć ,czy może zmniejszyć kondesatorki przy kwarcu (bo mam 33p). Procesor jest w sumie niezłym weteranem bo był chyba z 500 razy programowany (służy mi do różnych prób) ale to chyba nie ma większego znaczenia. Zależy mi na 10 MHz bo już mam zrobine cewki itd. i nie mogę sobie zmniejszyć częstotliwośći na tranzystorze.
Druga sprawa to ,że nie jestem pewnien czy procesor poprawnie realizuje program. Do pomiaru napięcia mam zrobiony prościutki przetwornik AD z rezystora i kondensatora wg. noty aplikacyjnej atmela. Oczywiście pomiar mi kompletnie nie działa. Idea jest taka ,że ładuję ten kondensator przez opornik i czekam aż mi sie napięcia na komparatorze zrównaja. Tymczaem nie udało mi się ani razu zrobić pomiaru ,zawsze przepełniał mi się licznik timera. Nie wiem czy dobrze napisałem program ale w skrócie wyglada to mniej więcej tak :
'konfiguracja komparatora :
Acsr.0 = 0
Acsr.0 = 1 'interrupt mode (toggle)
Acsr.7 = 1 'zasilanie komparatora na off
On Aci Kon_pomiaru
'timer :
Config Timer0 = Timer , Prescale = 1
On Timer0 Kon_czasu
.
.
.
dalsza cześć programu z wywołaniem procedury pomiar tym nadpobudliwym przyciskiem przyciskiem
.
.
.
Sub Pomiar
Acsr.7 = 0 'uruchamia komparator
Acsr.3 = 1 'uruchamia przerwanie
Load Timer0 , 64
Set Portb.2 'ladowanie kondensatora
Enable Timer0
End Sub Pomiar
Kon_pomiaru:
Czas = Timer0
Disable Timer0
Acsr.3 = 0
Acsr.7 = 1
Reset Portb.2
Call Pok_wynik
Return
Kon_czasu:
Disable Timer0
Acsr.3 = 0
Acsr.7 = 0
Reset Portb.2
Call Poza_zakresem
Return
Byłbym bardzo zobowiazny jakby ktoś się przyjżał temu programowi. Nie jestem pewien co do konfiguracji komparatora , ustawiłem bity ACSR.0 i ACSR.1 na 0 co teoretycznie powinno dawać przerwanie w momencie zmiany stanu komparatora.
Proszę o jakieś sugestie co mam zrocić ,zeby to w końcu zaczęło jakoś działać
.
Pozdrawiam.
Druga sprawa to ,że nie jestem pewnien czy procesor poprawnie realizuje program. Do pomiaru napięcia mam zrobiony prościutki przetwornik AD z rezystora i kondensatora wg. noty aplikacyjnej atmela. Oczywiście pomiar mi kompletnie nie działa. Idea jest taka ,że ładuję ten kondensator przez opornik i czekam aż mi sie napięcia na komparatorze zrównaja. Tymczaem nie udało mi się ani razu zrobić pomiaru ,zawsze przepełniał mi się licznik timera. Nie wiem czy dobrze napisałem program ale w skrócie wyglada to mniej więcej tak :
'konfiguracja komparatora :
Acsr.0 = 0
Acsr.0 = 1 'interrupt mode (toggle)
Acsr.7 = 1 'zasilanie komparatora na off
On Aci Kon_pomiaru
'timer :
Config Timer0 = Timer , Prescale = 1
On Timer0 Kon_czasu
.
.
.
dalsza cześć programu z wywołaniem procedury pomiar tym nadpobudliwym przyciskiem przyciskiem
.
.
.
Sub Pomiar
Acsr.7 = 0 'uruchamia komparator
Acsr.3 = 1 'uruchamia przerwanie
Load Timer0 , 64
Set Portb.2 'ladowanie kondensatora
Enable Timer0
End Sub Pomiar
Kon_pomiaru:
Czas = Timer0
Disable Timer0
Acsr.3 = 0
Acsr.7 = 1
Reset Portb.2
Call Pok_wynik
Return
Kon_czasu:
Disable Timer0
Acsr.3 = 0
Acsr.7 = 0
Reset Portb.2
Call Poza_zakresem
Return
Byłbym bardzo zobowiazny jakby ktoś się przyjżał temu programowi. Nie jestem pewien co do konfiguracji komparatora , ustawiłem bity ACSR.0 i ACSR.1 na 0 co teoretycznie powinno dawać przerwanie w momencie zmiany stanu komparatora.
Proszę o jakieś sugestie co mam zrocić ,zeby to w końcu zaczęło jakoś działać
Pozdrawiam.