Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Läuft mein AVR ??



Markus87
10.05.2011, 21:36
Hi, bin gerade dabei mich in Assembler einzuarbeiten und hab mir dazu auch da RN Controll 1.4 Board aufgebaut. Jetzt hab ich mit AVR Studio ein triviales Programm geschrieben. Es sollen nur die Ports PortC0 und PortC1 auf low gezogen werden, damit die beiden LED's leuchten.

Hier das Programm:



Main:
; Initiire Stapel
ldi rmp, HIGH(RAMEND) ; Initiiere MSB Stapel
out SPH,rmp
ldi rmp, LOW(RAMEND) ; Initiiere LSB Stapel
out SPL,rmp
; Initiiere Port C
ldi rmp,0b11111111 ; Richtung Port A
out DDRC,rmp

;
; ============================================
; P R O G R A M M - S C H L E I F E
; ============================================
;
Loop:

ldi rmp,0b11111100
out PORTC,rmp
rjmp loop ; Zurueck nach Loop


Das programmieren über isp hat auch gleich funktioniert nur wenn ich jetzt den isp stecker abziehe und auf reset drücke passiert rein garnichts...

Beim nachmessen der Spannungen am portc ergaben sich meistens 4,5V manchmal auch 3,irgendwas -> undefinierter zustand ?? Der Port müsste aber doch laut programm definiert sein ?? Hab auch an irgendwelchen Fuse Bits nix gemacht ist ein ganz neuer prozessor und müsste doch dann mit seinem internen takt laufen ?? (trotz angeschlossenem externen quartz)

Is warscheinlich nur ein extrem dummer anfängerfehler, wenn ich jedenfalls den Port per Drahtbrücke nach masse ziehe leutet die LED also kanns schon ma kein Lötfehler oder so was sein.

Dann noch eine andere Frage:

Muss ich immer wenn ich nicht am programm übertragen bin den isp programmer vom board trennen ? Im moment ist der programer so eingestellt das er das Board nicht mit spannung versorgt. Kann ich also auch alternativ die Spq. quelle vom board trennen und dann am programmer einstellen er soll das Board mit spannung versorgen ? und soll ich dann 3,3 oder 5V versorgungsspannung beim programmer wählen ?

Denk mal die sache wird nich alzu knifflig, vielen dank ;)

BMS
10.05.2011, 21:47
Hallo,

falls etwas an PORTC faul ist, ist meistens die JTAG-Fuse noch gesetzt, das solltest du einmal kontrollieren (Erfahrung?). JTAG wird eben an bestimmten Pins von PORTC heraus geführt. Bei einem "neuen" Prozessor ist diese Fuse immer standardmäßig gesetzt.

Kannst du Programm-/Compilerfehler ausschließen?

Grüße, Bernhard

PS: JTAG ist eine Schnittstelle, um den Controller debuggen zu können, also um während des Betriebs Registerinhalte etc. auslesen zu können und vieles mehr...

[[EDIT]]: PORTC,0 und PORTC,1 gehören nicht zu JTAG sondern zum I2C-Interface, ob die Fuse dann noch was ändert?? Ist es trotzdem einen Versuch wert? Aber Achtung, bei den Fuses kann man schnell mal was falsches einstellen und der µC ist dann evtl. nicht mehr ansprechbar...

Besserwessi
10.05.2011, 21:57
Beim Mega32 ist an den Pins vom PC2 bis PC5 der JATG Port. Den müßte man ggf. vorher deaktivieren.

Wenn die Fuses auf internen Takt stehen, so wie bei einem neuen µC, dann läuft der interne Takt, unabhängig davon was an dem XTAL Pins hängt. Der µC der mit dem RN Control kommt müßte aber schon programmiert sein: ein Bootloader und auch schon den externen Takt nutzen.

Ob man den ISP Programmer abziehen muss hängt vom Programmer ab. Es gibt welche die ISP Anschlüsse am Programmer trennen können. Die Verbindung kann dann bestehen bleiben.

Markus87
10.05.2011, 22:04
Hallo,

du hattest recht das jtag fuse war noch gesetzt und ich hab es abgeschaltet, aber es hat sich leider nichts an der situation geändert.

Beim kompilieren kommt kein fehler raus und die simulation liefert folgendes:
18777

Also gesamter Port C als Ausgang und die Pins 0 und 1 auf low, rest auf high.

Trotzdem messe ich an den Pins 0 und 1 jeweils 4,9 V :(

Den µC hab ich nicht mit dem RN Controll bezogen, er ist also komplett unberührt.

BMS
11.05.2011, 06:55
Hallo,
versuche doch einmal, andere Pins als PORTC,0 und PORTC,1 zu schalten und hänge dann die LEDs dran. Vielleicht funktioniert das ja.
Grüße, Bernhard

Bernd_Stein
11.05.2011, 11:33
Was mich ein wenig stört.
Wo ist der Sprungeintrag für den Reset der bei Adresse 0 im Flash, also im Programmspeicher stehen sollte ?
Hiermal ein Auszug für einen ATtiny13



.include "tn13def.inc" ;Label Zuweisungen
;
;Programmspeicher initialisieren
;
.CSEG ;Code Segment
.ORG $0000 ;Programm beginnt bei Adresse 0
;
;Programmstart mit Interrupt Vektoren
;
rjmp Anfang ;(RESET) External Pin, Power-on Reset, Brown-out
reti ;(INT0)External Interrupt Request 0
reti ;(PCINT0) Pin Change Interrupt Request 0
reti ;(TIM0_OVF) Timer/Counter Overflow
reti ;(EE_RDY) EEPROM Ready
reti ;(ANA_COMP) Analog Comparator
reti ;(TIM0_COMPA) Timer/Counter Compare Match A
reti ;(TIM0_COMPB) Timer/Counter Compare Match B
reti ;(WDT) Watchdog Time-out
reti ;(ADC) ADC Conversion Complete
;
; Hier Startet das Programm bei einem Reset
;
Anfang: ldi r16,$FF ;Zählerwert laden...
...


Bernd_Stein

Ceos
11.05.2011, 11:43
falls du den Sprungmarker suchst, der ist in der Prozessorarchitektur verankert (initial 0 nachm reset)
falls du den jump-Befehl dahin suchst, der wird nie ausgeführt, das passiert eben durch das reset

oder ha ich die Frage falsch verstanden ?

Markus87
11.05.2011, 17:46
Hallo, ja den Reset Vector hab ich natürlich auch drinn:



; ==============================================
; R E S E T V E K T O R
; ==============================================
;
.CSEG
.ORG $0000
jmp Main ; Reset-Vektor
;
; ============================================
; H A U P T P R O G R A M M I N I T
; ============================================
;
Main:


naja werd gleich mal die anderen ports ausprobieren mal sehen ob die funktionieren...

Ceos
11.05.2011, 18:15
ich "glaube" ich versteh was du meinst, da stehts doch in der ersten zeile nach den kommentaren, "rjmp Anfang" und ganz am ende "Anfang:"

ein jump auf den "Anfang" Marker

aber ich habe gerade beim Studium der Beschreibung und des Schaltplans die Widerstände R14 und R13 entdeckt, die über 10k an +5V anliegen! Ich versteh nicht ganz warum der die Leitung nicht runterzieht, aber es scheint, dass er nicht vernünftig auf Out steht!

Markus87
11.05.2011, 18:19
jetzt gehts endlich !! war wohl gestern doch was mit dem einem fuse bit schiefgelaufen ;) Jetzt läufts aber