PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Assemblen und Programmieren klappt, aber.....!



Fisch-Ei
12.08.2004, 12:25
Bin nun aufmerksam durch das tutorial von microcontroller.net gegangen, und an dem punkt angelangt, wo die erste code geschrieben wird und rübergespielt wird.

mein selbstgebauter isp funktioniert, sowie auch mein µC (atmel atmega8), denn mit ponyprog oder mit yaap wird er als atmega8 erkannt. außerdem im avr studio wird er natürlich nicht erkannt, aber ich glaube, dass das an meinem isp liegt.

jedenfalls hab ich den ersten code geschrieben, assembliert und mit ponyprog rübergespielt. der code ist anscheinend auch im µC drin, denn er lässt sich ja immer wieder korrekterweise auslesen!

als ich dann eine led an den PB0 (das ist der ausgang) angeschlossen habe, und über widerstand an vcc gegangen bin, leuchtet diese allerdings nicht, obwohl sie es tun müsste.... [-(

wo könnte hier der fehler sitzen? bin halt etwas neu...dadurch kann ich noch nicht ganz selbst fehleranalyse durchführen!

danke im voraus für eure antworten 8-[

12.08.2004, 13:21
Hast du ein Messgerät zur Verfügung?
Hast du die LED richtig herum angeschlossen?

Gruss, Alex

Fisch-Ei
12.08.2004, 13:36
led ist richtig angeschlossen! hab es auch schon anders herum versucht...

messgerät hab ich gerade versucht, es liegt aber keine spannung an, vielleicht nur so 0,5V...

ich bin verzweifelt.
hier der code, vielleicht liegts daran:


.include "4433def.inc" ;Definitionsdatei einbinden, ggf. durch
;2333def.inc ersetzen

ldi r16, 0xFF ;0xFF ins Arbeitsregister r16 laden
out DDRB, r16 ;Inhalt von r16 ins IO-Register DDRB ausgeben

ldi r16, 0b11111110 ;0b11111100 in r16 laden
out PORTB, r16 ;r16 ins IO-Register PORTB ausgeben

ende: rjmp ende ;Sprung zur Marke "ende" -> Endlosschleife


und ich habe dann meine led an PB0 angeschlossen, also ganz unten links an den pin des µC (mikrocontroller)

12.08.2004, 20:08
hi .
gebe mal für die include"4433de.inc die für den mega8 an

mfg totty

Fisch-Ei
12.08.2004, 21:48
meinste, daran könnte es liegen?

die 4433def.inc


;************************************************* **************************
;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y
;*
;* Number :AVR000
;* File Name :"4433def.inc"
;* Title :Register/Bit Definitions for the AT90S4433
;* Date :99.01.28
;* Version :1.30
;* Support telephone :+47 72 88 43 88 (ATMEL Norway)
;* Support fax :+47 72 88 43 99 (ATMEL Norway)
;* Support E-mail :avr@atmel.com
;* Target MCU :AT90S4433
;*
;* DESCRIPTION
;* When including this file in the assembly program file, all I/O register
;* names and I/O register bit names appearing in the data book can be used.
;* In addition, the six registers forming the three data pointers X, Y and
;* Z have been assigned names XL - ZH. Highest RAM address for Internal
;* SRAM is also defined
;*
;* The Register names are represented by their hexadecimal address.
;*
;* The Register Bit names are represented by their bit number (0-7).
;*
;* Please observe the difference in using the bit names with instructions
;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc"
;* (skip if bit in register set/cleared). The following example illustrates
;* this:
;*
;* in r16,PORTB ;read PORTB latch
;* sbr r16,(1<<PB6)+(1<<PB5) ;set PB6 and PB5 (use masks, not bit#)
;* out PORTB,r16 ;output to PORTB
;*
;* in r16,TIFR ;read the Timer Interrupt Flag Register
;* sbrc r16,TOV0 ;test the overflow flag (use bit#)
;* rjmp TOV0_is_set ;jump if set
;* ... ;otherwise do something else
;***** Specify Device
.device AT90S4433

;***** I/O Register Definitions
.equ SREG =$3f
.equ SP =$3d
.equ SPL =$3d
.equ GIMSK =$3b
.equ GIFR =$3a
.equ TIMSK =$39
.equ TIFR =$38
.equ MCUCR =$35
.equ MCUSR =$34
.equ TCCR0 =$33
.equ TCNT0 =$32
.equ TCCR1A =$2f
.equ TCCR1B =$2e
.equ TCNT1H =$2d
.equ TCNT1L =$2c
.equ OCR1H =$2b
.equ OCR1L =$2a
.equ ICR1H =$27
.equ ICR1L =$26
.equ WDTCR =$21
.equ EEAR =$1e
.equ EEDR =$1d
.equ EECR =$1c
.equ PORTB =$18
.equ DDRB =$17
.equ PINB =$16
.equ PORTC =$15
.equ DDRC =$14
.equ PINC =$13
.equ PORTD =$12
.equ DDRD =$11
.equ PIND =$10
.equ SPDR =$0f
.equ SPSR =$0e
.equ SPCR =$0d
.equ UDR =$0c
.equ UCSRA =$0b
.equ UCSRB =$0a
.equ UBRR =$09
.equ UBRRL =$09
.equ ACSR =$08
.equ ADMUX =$07
.equ ADCSR =$06
.equ ADCH =$05
.equ ADCL =$04
.equ UBRRH =$03


;***** Bit Definitions

.equ WDRF =3
.equ BORF =2
.equ EXTRF =1
.equ PORF =0

.equ INT1 =7
.equ INT0 =6

.equ INTF1 =7
.equ INTF0 =6


.equ TOIE1 =7
.equ OCIE1 =6
.equ TICIE1 =3
.equ TOIE0 =1

.equ TOV1 =7
.equ OCF1 =6
.equ ICF1 =3
.equ TOV0 =1

.equ SE =5
.equ SM =4
.equ ISC11 =3
.equ ISC10 =2
.equ ISC01 =1
.equ ISC00 =0

.equ CS02 =2
.equ CS01 =1
.equ CS00 =0

.equ COM11 =7
.equ COM10 =6
.equ PWM11 =1
.equ PWM10 =0

.equ ICNC1 =7
.equ ICES1 =6
.equ CTC1 =3
.equ CS12 =2
.equ CS11 =1
.equ CS10 =0

.equ WDTOE =4
.equ WDE =3
.equ WDP2 =2
.equ WDP1 =1
.equ WDP0 =0

.equ EERIE =3
.equ EEMWE =2
.equ EEWE =1
.equ EERE =0

.equ SPIE =7
.equ SPE =6
.equ DORD =5
.equ MSTR =4
.equ CPOL =3
.equ CPHA =2
.equ SPR1 =1
.equ SPR0 =0

.equ SPIF =7
.equ WCOL =6

.equ RXC =7
.equ TXC =6
.equ UDRE =5
.equ FE =4
.equ OR =3
.equ MPCM =0

.equ RXCIE =7
.equ TXCIE =6
.equ UDRIE =5
.equ RXEN =4
.equ TXEN =3
.equ CHR9 =2
.equ RXB8 =1
.equ TXB8 =0

.equ ACD =7
.equ AINBG =6
.equ ACO =5
.equ ACI =4
.equ ACIE =3
.equ ACIC =2
.equ ACIS1 =1
.equ ACIS0 =0

.equ ADCBG =6
.equ MUX2 =2
.equ MUX1 =1
.equ MUX0 =0

.equ ADEN =7
.equ ADSC =6
.equ ADFR =5
.equ ADIF =4
.equ ADIE =3
.equ ADPS2 =2
.equ ADPS1 =1
.equ ADPS0 =0

.equ PB5 =5
.equ PB4 =4
.equ PB3 =3
.equ PB2 =2
.equ PB1 =1
.equ PB0 =0

.equ DDB5 =5
.equ DDB4 =4
.equ DDB3 =3
.equ DDB2 =2
.equ DDB1 =1
.equ DDB0 =0

.equ PINB5 =5
.equ PINB4 =4
.equ PINB3 =3
.equ PINB2 =2
.equ PINB1 =1
.equ PINB0 =0

.equ PC5 =5
.equ PC4 =4
.equ PC3 =3
.equ PC2 =2
.equ PC1 =1
.equ PC0 =0

.equ DDC5 =5
.equ DDC4 =4
.equ DDC3 =3
.equ DDC2 =2
.equ DDC1 =1
.equ DDC0 =0

.equ PINC5 =5
.equ PINC4 =4
.equ PINC3 =3
.equ PINC2 =2
.equ PINC1 =1
.equ PINC0 =0

.equ PD7 =7
.equ PD6 =6
.equ PD5 =5
.equ PD4 =4
.equ PD3 =3
.equ PD2 =2
.equ PD1 =1
.equ PD0 =0

.equ DDD7 =7
.equ DDD6 =6
.equ DDD5 =5
.equ DDD4 =4
.equ DDD3 =3
.equ DDD2 =2
.equ DDD1 =1
.equ DDD0 =0

.equ PIND7 =7
.equ PIND6 =6
.equ PIND5 =5
.equ PIND4 =4
.equ PIND3 =3
.equ PIND2 =2
.equ PIND1 =1
.equ PIND0 =0


.def XL =r26
.def XH =r27
.def YL =r28
.def YH =r29
.def ZL =r30
.def ZH =r31

.equ RAMEND =$DF ;Last On-Chip SRAM Location
.equ XRAMEND =$DF
.equ E2END =$FF
.equ FLASHEND=$7FF

.equ INT0addr=$001 ;External Interrupt0 Vector Address
.equ INT1addr=$002 ;External Interrupt1 Vector Address
.equ ICP1addr=$003 ;Input Capture1 Interrupt Vector Address
.equ OC1Aaddr=$004 ;Output Compare1A Interrupt Vector Address
.equ OVF1addr=$005 ;Overflow1 Interrupt Vector Address
.equ OVF0addr=$006 ;Overflow0 Interrupt Vector Address
.equ SPIaddr =$007 ;SPI Interrupt Vector Address
.equ URXCaddr=$008 ;UART Receive Complete Interrupt Vector Address
.equ UDREaddr=$009 ;UART Data Register Empty Interrupt Vector Address
.equ UTXCaddr=$00a ;UART Transmit Complete Interrupt Vector Address
.equ ADCCaddr =$00b ;ADC Interrupt Vector Address
.equ ERDYaddr =$00c ;EEPROM Interrupt Vector Address
.equ ACIaddr =$00d ;Analog Comparator Interrupt Vector Address

Fisch-Ei
13.08.2004, 11:11
hat echt einfach niemand einen löäsungsansatz

ich bin so verzweifelt, hab alle grundschaltungen fehlerfrei aufgebaut und nun funktionieren meine i/o-ports des µC nicht (es fließt nur spannung von ca. 0,3V). hab mikrocontroller auch schon ausgewechselt!

ich werf das dings gleich inne ecke! ](*,)

13.08.2004, 11:16
Bei dir ist der Name echt Programm ...
Zitat aus der Datei:
;* Target MCU :AT90S4433
Denk mal drüber nach!

Gruss, Alex

Fisch-Ei
13.08.2004, 11:44
boah, soweit bin ich noch nicht den fehlern auf den grund gegangen! brauch jetzt also eine neue *.inc, richtig?

Fisch-Ei
13.08.2004, 11:48
tja, und die finde ich nicht über google! hätte jemand vielleicht eine *inc

DerInder
13.08.2004, 11:52
sind doch beim AVR-Studio alle dabei, unter Appnotes

Fisch-Ei
13.08.2004, 11:56
genau: das problem, welches ich hatte, dass ich net wusste, dass ich die m8def.inc brauche!

danke für eure antworten!

13.08.2004, 12:38
Schön das am Ende alles gut geworden ist :)

Alex

Fisch-Ei
13.08.2004, 23:38
jetzt klappts doch nicht! liegt wohl doch nicht an der unterschiedlichen include-datei!

hmm... sehr merkwürdig

14.08.2004, 19:20
hast du den port auch als ausgang definiert??

ich persönlich programmiere lieber in c.
als erstes muss ich mal die datenrichtung meiner ports festlegen(Ausgang oder Eingang)
wenn du mit c programmierst kann ich dir mit einem kleinen programm weiterhelfen.

Fisch-Ei
15.08.2004, 18:37
vielleicht sollte ich es mit c mal versuchen! was hättest du mir zu empfehlen...?

19.08.2004, 16:50
also ich sehe keinen fehler in deinem Programm, aber du MUSST schon die richtige *.include datei nehmen....

Also die Bezeichnung des MC, die TARGET DEVICE Einstellung ( soweit vorhanden, ,zB bei STK 500 Benutzung) und die *.inc Datei sollten übereinstimmen.

Die 0,5 V oder so sind LOW Pegel das ist schon korrekt so wenn du 11111110 schreibst. Messe mal PB1-7 nach, die sollten alle 5V haben.

Ansonsten: ähm, nur so paar Dinge die mir durch den kopf spuken..also zum einen brauchst du nicht unbedingt nen Widerstand, die ATs treiben LEDs zur Not auch direkt...,aber egal, dann frag ich mich wieso deine LED an VCC hängt und nicht an GND aber das mußt du wissen. Ansonsten kannst du ja mal PB0auf 1 setzen zum Spaß, eventuell tut sich da was wenn irgendwo was verkehrt herum auf dem falschen Pegel liegt.
Für den Fall das du versehentlich den Pin gecrashed hast probier es doch mal mit PB1 ....

probiers mal mit

ldi r16, 0xFF
out DDRB, r16
out PORTB, r16

und häng die LED direkt gegen GND. Wenn das nicht geht weiß ich auch nicht.

Michael
19.08.2004, 16:59
Hallo Pö,

die ATs treiben LEDs zur Not auch direkt..
toller Vorschlag für einen Anfänger...

versehentlich den Pin gecrashed
ach ja, alles klar, siehe oben, lol

und häng die LED direkt gegen GND. Wenn das nicht geht weiß ich auch nicht.
deine seltsamen Vorschläge haben Methode?
Du solltest dich noch etwas besser informieren ;)

An alle die es noch nicht wissen:
Auch eine LED ist ein Halbleiter und sollte _nie_ ohne Strombegrenzung betrieben werden. Am einfachsten ist hier der sog. Widerstand geeignet.
Gruß, Michael

20.08.2004, 09:08
Man o man das ist doch kein Beinbruch, was soll die Aufregung, wenn du in die Datenblätter siehst steht da zum Beispiel auch leistungsfähig genug ist das er LED Displays direkt versorgen kann, und die I/Os bringen 20 mA und besitzen soweit ich den internen Aufbau kennen einen internen Begrenzungswiderstand. also geht es erst einmal zum Ausprobieren, oder nicht?

Mein Vorschlag es ohne Widerstand und Co zu versuchen zielte eigentlich nur darauf ab durch eine Minimierung des Aufbaus die Fehlervariablen einzugrenzen.

Michael
20.08.2004, 12:19
Hallo Pö,

das ist doch kein Beinbruch
natürlich nicht. Ich finde es aber nicht in Ordnung, Anfängern wissentlich fasche Ratschläge zu geben :(

geht es erst einmal zum Ausprobieren, oder nicht?
eben nicht :( Du solltest in Zukunft nicht solche Halbwahrheiten verbreiten, bitte!

durch eine Minimierung des Aufbaus die Fehlervariablen einzugrenzen.
durch diese Minimierung ziehst du leider weitere Fehler nach. Aber da kanntest du dich ja aus, siehe:

Für den Fall das du versehentlich den Pin gecrashed hast probier es doch mal mit PB1 ....
sind ja genug dran, an so einem AVR...
Gruß, Michael

Kjion
20.08.2004, 16:12
... besitzen soweit ich den internen Aufbau kennen einen internen Begrenzungswiderstand.
Leider nicht richtig. Die ATmegas haben Push-Pull Treiber ohne Strombegrenzung ( haben das überhaupt irgendwelche Mikrocontroller ?? )...

LEDs sollte man fast nie ohne Vorwiderstand betreiben ( in dem Anwendungsfall hier schon gar nicht )

Gruß
Kjion

gast1234
13.01.2006, 12:22
Hallo,

ich benutze eigentlich die letzte Version von WinAVR auf die zum Download in
https://www.roboternetz.de/phpBB2/viewtopic.php?t=2158
http://sourceforge.net/projects/winavr
verwiesen wird.
Leider habe ich nach dem Installieren weder ein Verzeichnis Appnotes noch nur irgendeine *.inc.
Wo bekomme ich die denn nun her? Bräuchte eine für Mega8 und vielleicht auch auch Mega32.
Hat irgendwer nun schonmal eine Downloadquelle gefunden?
Bin hier echt verzweifelt und komme dadurch nicht weiter.
Welche ProgrammDatei benutzt ihr eigentlich zum Assembler "kompilieren"?
Grüße

Gast1234

pumann
14.01.2006, 00:56
... Version von WinAVR ... zum Assembler "kompilieren"

... passt irgendwie nicht richtig zusammen :-s , man kann zwar assembler-code einfügen, ist trotzdem umständlich, da vielmehr auf c orientiertes programm. dann nimm z.b. das avr-studio (http://atmel.com/dyn/products/tools_card.asp?tool_id=2725) von atmel ( beinhaltet auch die gesuchten *.inc - dateien ), ist für die assemblierung zumindest was solides.