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.
Ä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.
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.
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.
//----------------------------------------------------------------------
.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
Ä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?
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.
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"
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;