Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problemino atmega8535

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Problemino atmega8535

Messaggioda Foto Utentepeppe1992 » 12 mar 2018, 17:28

Salve a tutti, sto iniziando a fare qualche semplice programma in assembly avr per l'atmega8535
che poi trasferisco al microcontrollore in questione per verificare se funziona correttamente.
Ho fatto un programma che dopo 5 secondi deve accendermi un led e deve rimanere acceso.
Il programma funziona, e il led si accende il problema è che si accende dopo circa 20 secondi e non riesco a capire il perché.
Il tempo l'ho calcolato considerando che per il timer/counter1 con il prescaler clk/64 e clock a 4Mhz si ha un overflow ogni secondo, così ho pensato di fare 5 cicli e quindi dopo 5 overflow si accende il led.

Codice: Seleziona tutto

.include "8535def.inc"
;================================================


;==============
;definizione delle variabili. La Memoria Ram
; inizia dall'indirizzo esadecimale 60

.DSEG
.ORG 0x60



;=============

;=================================================
;Interrupt jump table;


.CSEG
.ORG 0x000
   rjmp   RESET      ;Reset        Handle $000
   reti         ;INT0         Handle $001
   reti         ;INT1         Handle $002
   reti         ;TIMER2 COMP  Handle $003
   reti         ;TIMER2 OVF   Handle $004
   reti         ;TIMER1 CAPT  Handle $005
   reti         ;TIMER1 COMPA Handle $006
   reti         ;TIMER1 COMPB Handle $007
   rjmp   attendi   ;TIMER1 OVF   Handle $008
   reti         ;TIMER0 OVF   Handle $009
   reti         ;SPI STC      Handle $00A
   reti         ;UART RX      Handle $00B
   reti         ;UART UDRE    Handle $00C
   reti         ;UART TX      Handle $00D
   reti         ;ADC         Handle $00E
   reti         ;EE_RDY       Handle $00F
   reti         ;ANA_COMP     Handle $010
;==========================================================


RESET:
;===========================
;'inizializzazione dello Stack pointer

;Setting Stack Pointer

   ldi r16, low(RAMEND)
   out SPL, r16
   ldi r16, high(RAMEND)
   out SPH, r16
; done
;===========================



;========Inizio programma principale================


sei
ldi r16, 0x03
ldi r17, 0x04
ldi r18, 0x05
ldi r19, 0xFF
out ddra, r19
out timsk, r17
out tccr1b, r16
loop:
rjmp loop

attendi:
dec r18
breq accendi
reti

accendi:
out porta, r19
loop1:
rjmp loop1


Grazie a tutti in anticipo
Avatar utente
Foto Utentepeppe1992
45 1 4
New entry
New entry
 
Messaggi: 64
Iscritto il: 17 mag 2011, 22:54

0
voti

[2] Re: Problemino atmega8535

Messaggioda Foto Utentexyz » 12 mar 2018, 17:44

Attento al codice degli interrupt, non salvi e ripristini nessun registro. Quel codice modifica il registro di stato non salvato con conseguenze gravi e usa i registri come variabili globali, cose in generale da evitare.
Avatar utente
Foto Utentexyz
5.015 2 4 5
Master EY
Master EY
 
Messaggi: 1303
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[3] Re: Problemino atmega8535

Messaggioda Foto UtenteEcoTan » 12 mar 2018, 18:10

Non è che il clock va a 1 MHz anzichè 4? Questo dipende dall'eventuale quarzo e dai fusebit.
Avatar utente
Foto UtenteEcoTan
5.057 4 10 13
Expert EY
Expert EY
 
Messaggi: 2754
Iscritto il: 29 gen 2014, 8:54

0
voti

[4] Re: Problemino atmega8535

Messaggioda Foto Utentepeppe1992 » 12 mar 2018, 20:24

xyz ha scritto:Attento al codice degli interrupt, non salvi e ripristini nessun registro. Quel codice modifica il registro di stato non salvato con conseguenze gravi e usa i registri come variabili globali, cose in generale da evitare.

Quindi dovrei utilizzare push e pop per salvare l'sreg giusto?
Quali potrebbero essere le gravi conseguenze?
Avatar utente
Foto Utentepeppe1992
45 1 4
New entry
New entry
 
Messaggi: 64
Iscritto il: 17 mag 2011, 22:54

0
voti

[5] Re: Problemino atmega8535

Messaggioda Foto Utentepeppe1992 » 12 mar 2018, 20:26

EcoTan ha scritto:Non è che il clock va a 1 MHz anzichè 4? Questo dipende dall'eventuale quarzo e dai fusebit.

Sulla scheda ho un quarzo da 4Mhz, ma questa cosa dei fusebit non la conosco. Come vanno utilizzati?
Avatar utente
Foto Utentepeppe1992
45 1 4
New entry
New entry
 
Messaggi: 64
Iscritto il: 17 mag 2011, 22:54

0
voti

[6] Re: Problemino atmega8535

Messaggioda Foto UtenteIlGuru » 12 mar 2018, 20:46

Quanti cicli di clock servono per fare 1 ciclo macchina?
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
3.782 1 9 13
Master
Master
 
Messaggi: 1173
Iscritto il: 31 lug 2015, 23:32

0
voti

[7] Re: Problemino atmega8535

Messaggioda Foto Utentexyz » 12 mar 2018, 21:05

peppe1992 ha scritto:Quali potrebbero essere le gravi conseguenze?

Gli AVR non salvano in automatico il registro di stato quando si scatena un interrupt, deve essere il codice che gestire interrupt a salvare il registro e tutti gli altri registri utilizzati dal codice e prima di uscire ripristinarli nella giusta sequenza.

Se non viene fatto le conseguenze sono ovvie. Se stai facendo per esempio un confronto e succede un interrupt tra il test e il salto condizionato successivo puoi modificare in modo imprevedibile il confronto e rendere molto instabile il programma.
Avatar utente
Foto Utentexyz
5.015 2 4 5
Master EY
Master EY
 
Messaggi: 1303
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[8] Re: Problemino atmega8535

Messaggioda Foto UtenteEcoTan » 12 mar 2018, 23:11

peppe1992 ha scritto:fusebit

I 4 fusebit che riguardano il clock si chiamano CKSEL3..0. Inizialmente sono programmati al valore 0001 cioè l'oscillatore prescelto è quello RC interno alla frequenza appunto di 1 MHz.
Per conoscere il significato dei 4 bit devi consultare il datasheet del micro
http://ww1.microchip.com/downloads/en/D ... oc2502.pdf
e per programmarli devi avere qualcosa, per esempio Bascom AVR quindi dal menu Program cliccare Send to chip, poi la scheda Lock and fuse bits.

P.S. si possono programmare anche da assembler tramite il command byte e complicazioni varie, sempre il datasheet spiega tutto.
Avatar utente
Foto UtenteEcoTan
5.057 4 10 13
Expert EY
Expert EY
 
Messaggi: 2754
Iscritto il: 29 gen 2014, 8:54

0
voti

[9] Re: Problemino atmega8535

Messaggioda Foto Utentepeppe1992 » 13 mar 2018, 21:16

Grazie mille ho risolto. Erano i fusebit. Ovviamente passando dal simulatore avr alla realtà pratica il discorso è cambiato. Non ne sapevo nulla di questi fusebit, adesso li ho programmati e funziona correttamente.
Grazie a tutti mi siete stati molto di aiuto!! :ok: :ok: :ok:
Avatar utente
Foto Utentepeppe1992
45 1 4
New entry
New entry
 
Messaggi: 64
Iscritto il: 17 mag 2011, 22:54


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite