lära sig programmera i avr-studio i C(nytt problem 20-01-08

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
petterp
Inlägg: 139
Blev medlem: 2 maj 2007, 21:30:39
Ort: Öland || Jönköping

Inlägg av petterp »

Jag tänkte ifall någon här visste en lösning på problemet ;)

Tillägg;
Är debuggningen nödvändig?

Upptäkte att jag kan skapa hex filen, och då kan jag programmera :P
eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Inlägg av eqlazer »

ISP:en har ingen möjlighet till debuging, endast flasha kretsar. För att kunna använda debugwire eller jtag krävs en dragon eller jtagice. Det du kan göra i nuläget med utvecklingsmiljön är att simulera, annars är det att ladda ner på kretsen och testa där som gäller.

Jag har själv aldrig använt WinAVR eller AVRstudio, så jag kan tyvärr inte svara på några mer ingående frågor om dessa. Själv kör jag linux, eclipse/gedit/vim/whatever, makefiles och avrdude.
eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Inlägg av eqlazer »

petter.pet skrev: Tillägg;
Är debuggningen nödvändig?
Nej, vi skriver felfri kod direkt, mycket enklare så :)
JJ
Inlägg: 366
Blev medlem: 16 maj 2005, 21:33:02

Inlägg av JJ »

Är du med på vad som menas med debuggning i dethär fallet? Det är att man kan ladda koden och sedan stega igenom den samtididigt som man kan se var i koden man är och sätta brytpunkter och läsa av variabelvärden etc.

Alltså: nej det är inte nödvändigt.
Användarvisningsbild
petterp
Inlägg: 139
Blev medlem: 2 maj 2007, 21:30:39
Ort: Öland || Jönköping

Inlägg av petterp »

nä det visste jag inte :P

ok då löste de ju sig ;)

ingen som har någon bra sida på hur man lär sig programmering i c eller vad de olika kommandon står för?
Användarvisningsbild
nole
Inlägg: 651
Blev medlem: 10 januari 2006, 12:18:00
Ort: Borlänge

Inlägg av nole »

Dom har ju nämnt http://www.avrfreaks.net/ tidigare i tråden, det och databladet borde räcka för att "sätta fart" på dig :) kolla även våran Wiki den innehåller en del om AVR ASM/C.
Användarvisningsbild
petterp
Inlägg: 139
Blev medlem: 2 maj 2007, 21:30:39
Ort: Öland || Jönköping

Inlägg av petterp »

Nu har jag fått ett nytt problem, ungefär direkt efter det först ;)
Jag har inte förstått mig på detta med att välja vilken pinne som är utgång eller ingång, eller hur man sätter en pinne hög eller låg. Om man vill att den ska vänta i X sekunder.

Ingen som vet vart man kan få tag på svenska guider?

Jag skulle verkligen behöva hjälp med grunderna, hittar bara guider som är skrivna på Engelska som inte förklarar tillräckligt ingående.

hoppas någon kan hjälpa mig

tack igen
/petter
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Inlägg av BEEP »

Assembler - ATmega88

Kod: Markera allt

//----------------------------------------------------------------------
.INCLUDE "m88def.inc"

//----------------------------------------------------------------------			
.def temp = r16

//--- Interrupt Vector -------------------------------------------------
.org 0x000
rjmp Reset			; Reset Handler

//--- Reset ------------------------------------------------------------
.org 0x01A
Reset:
	; Set up the stackpointer
	ldi temp, LOW(RAMEND)	; Set stackpointer to ram end
	out SPL, temp
	ldi temp, HIGH(RAMEND)
	out SPH, temp
	; set global interrupt enable
	sei

//--- Initialize --------------------------------------------------------
Init_PORTB:	
	; Sätter pinne 2 på PORTB till utgång
	ldi temp, 0b00000100 		
	out DDRB, temp		

//--- Loop --------------------------------------------------------------
Loop:	
	; Sätter pinne 2 på PORTB hög (plus)	
	sbi PORTB, 2		; Om den ska vara låg (minus) byt ut sbi till cbi

	rjmp Loop


eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Inlägg av eqlazer »

Är det mega88 du använder? Kolla isf 13.2.1 i databladet.

Finns många sätt hur man kan skriva detta, men de flesta varianter får i stort sett samma resultat.
Exempel: sätta PB2 som ingång och PC6 som utgång

DDRB &= ~(1<<PB2); //Nollställer tredje biten i registret
DDRC |= (1<<PC6); // Ettställer sjunde biten i registret

PORTC &= ~(1<<PC6); //Skriva 0 till PC6
PORTC |= (1<<PC6); //Skriva 1 till PC6

temp = (1<<PB2)&PINB; //Läser PB2 och sparar dess värde i temp

För att kunna "vänta i X sekunder" så behöver du blanda in timers. Vill du skriva egna rutiner för att lära dig hur det fungerar eller vill du använda färdiga bibliotek?
Användarvisningsbild
Zyxel615
EF Sponsor
Inlägg: 1839
Blev medlem: 9 november 2005, 21:20:43
Ort: Kiruna

Inlägg av Zyxel615 »

Användarvisningsbild
petterp
Inlägg: 139
Blev medlem: 2 maj 2007, 21:30:39
Ort: Öland || Jönköping

Inlägg av petterp »

jag använder en atmega32 och programmerar i C (har installerat WinAvr)
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

petterp skrev:Ingen som vet vart man kan få tag på svenska guider?
Tyvärr är det nog bara att bita i det sura äpplet och försöka plöja igenom exempel på engelska. Börjar du med svenska guider så kanske risken att du vänjer dig vid att hitta information på svenska, och eftersom alla datablad är på engelska så hamnar du nog ändå i en återvändsgränd förr eller senare.

Misstolka mig dock inte, jag vet att det finns behov för svenska guider och liknande, men antagligen är det ingen som orkar ägna större energi på det just för att de texter som är på engelska innebär att en större målgrupp som läser dem än om de vore svenska diton.
Användarvisningsbild
petterp
Inlägg: 139
Blev medlem: 2 maj 2007, 21:30:39
Ort: Öland || Jönköping

Inlägg av petterp »

Kunde nästan tänka mig de :P

Allt jag behöver nu för tillfället är bara (bara å bara) beskrivning över:

1: Hur jag väljer vilken krets jag ska använda
2: Hur jag sätter pinar som In- eller Utgång
3: Hur jag sätter utgång som hög eller låg.
4: Hur jag döper om in pinne från Ex. "pina.1" till knapp"
5: Skulle uppskatta ifall någon skulle kunna skriva en enkel beskrivning över en program som tänder en diod när en knapp är "0"

Jag skriver i C
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Databladet sid 53, precis som eqlazer visade dig.

Kod: Markera allt

C Code Example(1)
unsigned char i;
...
/* Define pull-ups and set outputs high */
/* Define directions for port pins */
PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);
DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
/* Insert nop for synchronization*/
_NOP();
/* Read port pins */
i = PINB;
Fråga 4

Kod: Markera allt

#define (PINA & (1<<PA1)) knapp
Fråga 5

Kod: Markera allt

if(!knapp)
{
PORTB |= (1<<PB1)
}
CyberLeffe
Inlägg: 50
Blev medlem: 22 februari 2007, 01:15:26
Ort: Göteborg/Örebro

Inlägg av CyberLeffe »

Skriv svar