Toon posts:

Atmega32 Uart met interupt lukt niet

Pagina: 1
Acties:

Anoniem: 414228

Topicstarter
Beste tweakers

ik ben bezig met een Atmega32 programeren en ik wil wat experimenten uitvoeren.
hiervoor wil ik eerst een uart verbinding maken met mijn laptop.

zonder interupt is het mij al gelukt zowel RX als TX maar met interupt lukt het mij gewoon niet.
iemand sugesties ?
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 8000000
#define BAUD   38400   // F_CPU is 8000000 Hz
#define UBRR_VALUE ( ((F_CPU) + 8UL*(BAUD)) / (16UL*(BAUD)) - 1UL )


void uart_init(unsigned int ubrr) 
{
  UBRRL = ubrr;
  UBRRH = (ubrr >> 8);
  UCSRC = _BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0); // 8 N 1
  UCSRB = _BV(RXEN)|_BV(TXEN)|_BV(RXCIE);
}

ISR(USART_RXC_vect)
{
  char data;

  data = UDR; // ontvang byte
  UDR = data; // verstuurde byte 
}

int main(void)
{
  uart_init(UBRR_VALUE);
  sei();

  while(1) {}
}

voor suggesties :
- ik heb intern osc. 8 mhz (DUBBLE CHECK)
- connectie is goed, dus het is software

[Voor 10% gewijzigd door Anoniem: 414228 op 08-07-2011 03:19]


  • houthakker
  • Registratie: Juli 2003
  • Laatst online: 14:13
als polled wel lukt, zou ik zeggen dat het niet ligt aan je UART instellingen.

gebruik je winavr/avr-gcc of avrstudio?

weet je zeker dat USART_RXC_vect goed is? daar krijg je geen compiler fout op?
misschien kun je in de will pollen of er wel data ontvangen word (alsnog polled)

Specs


Acties:
  • 0Henk 'm!

  • Infant
  • Registratie: Januari 2008
  • Laatst online: 10:50

Infant

It's a floating Dino!

Wachten kan nooit kwaad.
C:
1
2
3
    data = UDR; // ontvang byte
    while !(UCSRA & (1<<UDRE));
    UDR = data; // verstuurde byte 


Alleen UBRRL inladen met 12 in jouw geval?

Acties:
  • 0Henk 'm!

Anoniem: 414228

Topicstarter
houthakker schreef op donderdag 07 juli 2011 @ 23:14:
als polled wel lukt, zou ik zeggen dat het niet ligt aan je UART instellingen.

gebruik je winavr/avr-gcc of avrstudio?

weet je zeker dat USART_RXC_vect goed is? daar krijg je geen compiler fout op?
misschien kun je in de will pollen of er wel data ontvangen word (alsnog polled)
pollen is ook een optie voor mij maar ik heb veel liever interupts, dat maakt mijn code veel overzichterlijker

ik heb nog niet echt een een goede manier bedacht hoe ik de USART_RXC_vect kan testen.
ik heb tot nu toe een led blink in mijn MAIN laten draaien en dan iets versturen naar mijn atmega.

vervolgens stop de led blink ermee.
dus er is een teken van leven. maar ik krijg geen reactie terug.
het lijkt er een beetje op dat hij de UDR niet leeg schrijft :S

Acties:
  • 0Henk 'm!

Anoniem: 414228

Topicstarter
Infant schreef op vrijdag 08 juli 2011 @ 02:03:
Alleen UBRRL inladen met 12 in jouw geval?
klopt maar ik laat het liever uitrekenen als het kan.
baud 38.4k
ubbr 12
err 0.2%
8 mhz
Infant schreef op vrijdag 08 juli 2011 @ 02:03:
Wachten kan nooit kwaad.
C:
1
2
3
    data = UDR; // ontvang byte
    while !(UCSRA & (1<<UDRE));
    UDR = data; // verstuurde byte 
kan je deze interupt soort wel wachten op dat de UDRE vrij is ?

ik ga het morgen ochtend proberen

Acties:
  • 0Henk 'm!

  • Stoney3K
  • Registratie: September 2001
  • Laatst online: 14:20

Stoney3K

Flatsehats!

Kijk ook even of je Global Interrupt Mask goed staat: Als de USART_RXC interrupt gemaskeerd staat kun je natuurlijk wachten tot je een ons weegt. ;)

Zet het daar maar neer! -- It's time to party like it's 1984 -- Soundcloud


Acties:
  • 0Henk 'm!

  • houthakker
  • Registratie: Juli 2003
  • Laatst online: 14:13
Anoniem: 414228 schreef op vrijdag 08 juli 2011 @ 03:04:
[...]


pollen is ook een optie voor mij maar ik heb veel liever interupts, dat maakt mijn code veel overzichterlijker

ik heb nog niet echt een een goede manier bedacht hoe ik de USART_RXC_vect kan testen.
ik heb tot nu toe een led blink in mijn MAIN laten draaien en dan iets versturen naar mijn atmega.

vervolgens stop de led blink ermee.
dus er is een teken van leven. maar ik krijg geen reactie terug.
het lijkt er een beetje op dat hij de UDR niet leeg schrijft :S
klinkt alsof de boel crashed om dat de processor niet naar de goede interrupt handler jumpt

Specs


Acties:
  • 0Henk 'm!

Anoniem: 414228

Topicstarter
houthakker schreef op donderdag 07 juli 2011 @ 23:14:
gebruik je winavr/avr-gcc of avrstudio?
WINAVR/AVR-GCC gebruik ik

Acties:
  • 0Henk 'm!

Anoniem: 414228

Topicstarter
enig idee hoe ik dat kan testen ?
houthakker schreef op vrijdag 08 juli 2011 @ 09:32:
[...]


klinkt alsof de boel crashed om dat de processor niet naar de goede interrupt handler jumpt

Acties:
  • 0Henk 'm!

  • Sphere-
  • Registratie: November 2003
  • Laatst online: 24-05 21:58
Anoniem: 414228 schreef op vrijdag 08 juli 2011 @ 12:00:
enig idee hoe ik dat kan testen ?

[...]
De eerste n bytes van de SRAM staan de interrupt vectors.
Deze kan je terug vinden in de datasheet.

Je kan met JTAG een breakpoint zetten (indien je JTAG gebruikt).
Anders kan je eventueel in assembly de interrupt vectors die je niet gebruikt naar een eigen functie zetten.

Indien hij inderdaad naar de verkeerde interrupt vector jumpt is USART_RXC_vect wellicht niet de juiste.
De vectornamen voor eenzelfde soort interrupt kunnen verschillen tussen verschillende devices, alhoewel als de headers goed zijn opgezet hij op device type filtert en je niet zomaar de verkeerde zou kunnen gebruiken.

[Voor 20% gewijzigd door Sphere- op 08-07-2011 12:57]

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee